【问题标题】:User object not saving in afterSave code用户对象未保存在 afterSave 代码中
【发布时间】:2015-11-28 18:34:36
【问题描述】:

我尝试了多种变体,但由于某种原因,“关注者”字段没有增加:

ParseObject follow = new ParseObject("Follow");
follow.put("from", currentUser);
follow.put("to", parseUser);
follow.put("approved", approved);

然后在云代码中:

Parse.Cloud.afterSave("Follow", function(request) {
    var to = request.object.get("to");
    var query = new Parse.Query(Parse.User);
    query.equalTo("objectId", to.id);
    query.first({
        success: function(user) {
            user.increment("Followers");
            user.save();
            console.log("User: " + user.id + " Followers: " + user.get("Followers"));
        }, error: function(error) {
            console.log("afterSave: " + error);
        }
    });

    var currentUser = Parse.User.current();
    currentUser.increment("Following");
    currentUser.save();
});

根据它正在工作的日志:

I2015-11-28T18:21:54.745Z]v47 after_save 触发了用户 k0ZvNAy3Mk 的关注: 输入:{"object":{"approved":false,"createdAt":"2015-11-28T18:21:54.743Z","from":{"__type":"Pointer","className":"_User ","objectId":"k0ZvNAy3Mk"},"objectId":"JQBO9m21uA","to":{"__type":"Pointer","className":"_User","objectId":"bcpbFaXj9C"},"更新时间":"2015-11-28T18:21:54.743Z"}} 结果:成功 I2015-11-28T18:21:54.906Z]用户:bcpbFaXj9C 关注者:1

但是当我查看数据时,该用户的关注者字段仍然显示为 0

我也试过了:

Parse.Cloud.afterSave("Follow", function(request) {
    var to = request.object.get("to");
    to.increment("Followers");
    to.save();

    var currentUser = Parse.User.current();
    currentUser.increment("Following");
    currentUser.save();
});

根据文档,因为它是一个指针,我应该能够直接操作它,但这也不起作用。

有什么想法可以做什么或为什么不能正常工作?

【问题讨论】:

  • 您的代码看起来不错...关注者和关注字段是什么类型?
  • Followers 和Followers 都是数字。关注用户正常工作,只是其他用户的关注者没有增加。

标签: parse-platform parse-cloud-code


【解决方案1】:

save() 是异步函数,在它完成之前你不应该离开这个函数。使用这个:

user.save().then(function(success){
console.log("User: " + success.id + " Followers: " + success.get("Followers"));
}, function (error){
console.log(error.message);
});

【讨论】:

  • 在日志中得到这个:I2015-11-29T19:22:15.553Z]Parse::UserCannotBeAlteredWithoutSessionError
  • 看来我需要添加:Parse.Cloud.useMasterKey();
【解决方案2】:

看起来解析云代码取决于当前登录的用户,并且除非您以他们的身份登录,否则不允许操作其他用户的数据。

Parse.Cloud.afterSave("Follow", function(request) {
    Parse.Cloud.useMasterKey(); // Needed this

    var to = request.object.get("to");
    to.increment("Followers");
    to.save();

    var currentUser = Parse.User.current();
    currentUser.increment("Following");
    currentUser.save();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多