gpt4 book ai didi

javascript - Parse.com 云代码错误 : success/error was not called when trying to update a user

转载 作者:可可西里 更新时间:2023-11-01 04:57:37 24 4
gpt4 key购买 nike

我从未使用过云代码/javascript,我正在尝试编写一些解析云代码以使用传递到云函数的 objectId 查找用户,然后更新拥有 friend 的用户关系并最终保存该用户。

下面是我使用的函数:

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");
}

});

});

我设法使用 Parse 文档将其拼凑在一起。但我真的没有很好地遵循它。从未使用过 javascript,发现语法令人困惑。

然后我用

调用函数
//fromUser is a PFUser object defined further up
[PFCloud callFunctionInBackground:@"addFriendToFriendsRelation" withParameters:@{@"fromUserObjectId" : fromUser.objectId} block:^(id object, NSError *error) {

}

然而,每当调用此函数时,我都会收到成功/错误未调用错误。虽然我在函数中调用了 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");
}

});


});

最佳答案

一个老问题,但由于它已被投票,也许回答可以帮助其他人:)。

首先,您保存 fromUser 的方式有误。

fromUser.save({ 成功: ...

如果您查看 api你可以看到它应该是这样的形式:

fromUser.save(null, { 成功: ...

但是阻止您找到错误的更大问题是错误被吃掉了,因为您使用的是处理异步代码的老式方法,而不是使用 promises。

下面,我重写了使用 promise 。注:

  1. 我总是返回 promise 生成调用(还有其他选项可以捕获异步代码中的错误,但从这个开始。)
  2. 在最后放一个.catch.catch 实际上与 .then(null, response.error) 相同,但无论哪种方式,都必须有最后的后备来捕获错误。在你上面的代码中,错误出现在一个成功 block 中,它正在异步运行,所以当出现错误时,它失败了,没有人听到:)。

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);
});

关于javascript - Parse.com 云代码错误 : success/error was not called when trying to update a user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com