#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()
функцию, я обновлю свой код, чтобы он был полным примером.