Sto*_*ton 5 javascript ios parse-platform parse-cloud-code
香港专业教育学院从未使用过云代码/ javascript,我正在尝试编写一些解析云代码来查找使用传递给云功能的objectId的用户,然后更新持有朋友的用户关系,最后保存该用户.
以下是我使用的函数:
Parse.Cloud.define("addFriendToFriendsRelation", function(request, response) {
Parse.Cloud.useMasterKey();
var fromUserObjectId = request.params.fromUserObjectId;
var acceptingUser = request.params.user;
var query = new Parse.Query(Parse.User);
// find the user the request was from using the objectId
query.get(fromUserObjectId, {
success: function(user) {
var fromUser = user
var relation = fromUser.relation("friends");
relation.add(acceptingUser);
fromUser.save({
success: function() {
response.success("Successfully saved the users relation")
},
error: function() {
response.error("Save failed");
}
});
},
error: function() {
response.error("Save failed");
}
});
});
Run Code Online (Sandbox Code Playgroud)
我设法使用Parse文档将它拼凑在一起.但我真的没跟好它.从未使用过javascript,我发现语法令人困惑.
然后即时调用函数
//fromUser is a PFUser object defined further up
[PFCloud callFunctionInBackground:@"addFriendToFriendsRelation" withParameters:@{@"fromUserObjectId" : fromUser.objectId} block:^(id object, NSError *error) {
}
Run Code Online (Sandbox Code Playgroud)
但无论何时调用此函数,我都会获得成功/错误,而不是调用错误.虽然我在函数中调用response.success和response.error,所以我不知道为什么会这样?任何人都可以伸出援手吗?
编辑:在做了一些搜索后,看起来像response.success和response.error应该只调用一次,所以我修改我的函数看起来像这样:
arse.Cloud.define("addFriendToFriendsRelation", function(request, response) {
Parse.Cloud.useMasterKey();
var fromUserId = request.params.fromUserObjectId;
console.log("fromUserId:");
console.log(fromUserId);
var acceptingUser = request.params.user;
console.log("acceptingUser:")
console.log(acceptingUser);
var query = new Parse.Query(Parse.User);
query.get(fromUserId, {
success: function(user) {
console.log("found user:");
console.log(user);
var fromUser = user;
var relation = fromUser.relation("friends");
relation.add(acceptingUser);
console.log("added accepting user to relation");
fromUser.save({
success: function() {
response.success("successfully saved user")
},
error: function() {
response.error("error saving user");
}
});
console.log("found a user");
},
error: function() {
console.log("error finding user");
}
});
});
Run Code Online (Sandbox Code Playgroud)
小智 0
这是一个老问题,但由于它已被投票,也许回答可以帮助其他人:)。
首先,您从用户保存的方式存在错误。
fromUser.save({ success: ...
如果您查看api,您会发现它应该采用以下形式:
fromUser.save(null, { success: ...
但是,阻止您发现错误的更大问题是,错误正在被吞噬,因为您使用的是处理异步代码的旧式方法,而不是使用承诺。
.catch最后加一个。这.catch实际上是相同的事情.then(null, response.error),但无论哪种方式,都必须有最终的支持来捕获错误。在上面的代码中,错误发生在异步运行的成功块中,因此当出现错误时,它会失败而没有人听到:)。Parse.Cloud.define("addFriendToFriendsRelation", (request, response) => {
const fromUserId = request.params.fromUserObjectId;
console.log("fromUserId:", fromUserId);
const acceptingUser = request.user;
console.log("acceptingUser:", acceptingUser)
new Parse.Query(Parse.User);
.get(fromUserId, { useMasterKey: true })
.then((fromUser) => {
console.log("found fromUser:", fromUser);
const relation = fromUser.relation("friends");
relation.add(acceptingUser);
console.log("added accepting user to relation");
return fromUser.save(null, { useMasterKey: true })
})
.then(response.success)
.catch(response.error);
});
Run Code Online (Sandbox Code Playgroud)