Определить взаимосвязь между двумя пользователями с помощью синтаксического анализа JavaScript

#javascript #objective-c #parse-platform

#javascript #objective-c #синтаксический анализ-платформа

Вопрос:

Я хотел бы установить простую связь между текущим пользователем и другим пользователем (UserB). Я могу создать sampleRelation , и текущий пользователь отображается в sampleRelation столбце пользователя в браузере данных, но список отношений текущего пользователя пуст, хотя в нем должно отображаться имя пользователя. Javascript мне совершенно неизвестен, я должен использовать его, потому что CloudCode, изначально я использую iOS SDK, где я вызываю эту функцию CloudCode следующим образом:

 [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
        if (object) {
PFUser *user = (PFUser *)object;          
[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}]; }];
  

и вот реализация JavaScript:

 Parse.Cloud.define('editUser', function(request, response) {
               var userId = request.params.userId;

               var User = Parse.Object.extend('_User'),
               user = new User({ objectId: userId });

               var currentUser = request.user;

               var relation = user.relation("sampleRelation");
               relation.add(currentUser);

               currentUser.save();

               Parse.Cloud.useMasterKey();
               user.save().then(function(user) {
                                response.success(user);
                                }, function(error) {
                                response.error(error)
                                });
               });
  

Я уверен, что каким-то образом мне нужно сохранить отношение для текущего пользователя, поэтому я добавил currentUser.save(); строку, но ничего не изменилось. Я не могу понять, что я пропустил что-то для реализации или существующий код скрывает ошибку.

Моя попытка основана на ответе Тимоти.

 Parse.Cloud.define('editUser', function(request, response) {
               var userId = request.params.userId;

               var User = Parse.Object.extend('_User'),
               user = new User({ objectId: userId });

               var currentUser = request.user;

               var relation = user.relation("sampleRelation");

               relation.add(currentUser);

               Parse.Cloud.useMasterKey();
               var userQuery = new Parse.Query(Parse.User);
               userQuery.get(request.params.userId)
               .then(function (user) {
                     var relation = user.relation("sampleRelation");
                     relation.add(request.user);
                     // chain the promise
                     return user.save();
                     ).then(function (user) {
                            response.success(user);
                            }, function (error) {
                            response.error(error);
                            });
  

И вот ошибка, которую я получил:

 Update failed with Could not load triggers.  The error was Uncaught SyntaxError: Unexpected token . in main.js:28
  

Второе обновление

 Parse.Cloud.useMasterKey();
var userQuery = new Parse.Query(Parse.User);
userQuery.get(request.params.userId)
.then(function (user) {
      var relation = user.relation("sampleRelation");
      relation.add(request.user);
      // chain the promise
      return user.save();
      }).then(function (user) {
              response.success(user);
              }, function (error) {
              response.error(error);
              });
  

Ответ №1:

Вы не меняете, currentUser поэтому вызов currentUser.save() ничего не сделает.

Также при получении существующего пользователя вы должны сделать следующее:

 Parse.Cloud.define('editUser', function(request, response) {
    Parse.Cloud.useMasterKey();

    var userQuery = new Parse.Query(Parse.User);

    userQuery.get(request.params.userId)
    .then(function (user) {
        var relation = user.relation("sampleRelation");
        relation.add(request.user);
        // chain the promise
        return user.save();
    }).then(function (user) {
        var currentUser = request.user;
        var relation = currentUser.relation("sampleRelation");
        relation.add(user);
        // chain the new promise
        return currentUser.save();
    }).then(function () {
        response.success();
    }, function (error) {
        response.error(error);
    });
});
  

Комментарии:

1. Возможно, я сделал что-то не так, но я получил сообщение об ошибке. Я обновил свой вопрос своей попыткой, основанной на вашем ответе.

2. Я понял, что в моем я пропустил } после return user.save(); строки. Также в вашем обновленном коде вы можете удалить все перед вызовом useMasterKey() .

3. Я получил это с обновленным кодом, Update failed with Could not load triggers. The error was ReferenceError: request is not defined at main.js:3:15 Возможно, у вас есть какие-либо идеи, в чем может быть проблема?

4. Ммм, ты оставил там Parse.Cloud.define() очередь? Возможно, обновите свой обновленный код в вопросе.

5. Хорошо, вам все равно нужно обернуть это в define() функцию, я обновлю свой код, чтобы он был полным примером.