5

每当我的对象的单个键的值在解析云代码afterSave挂钩中发生变化时,我都想发送推送通知。

Parse.Cloud.afterSave("Channel", function(request) {  
    var channel = request.object
    // TODO: check if value of channel key "state" was changed
});

如何检查密钥的值是否state已更新?

这是我可以从request对象中获得的所有数据:http: //parseplatform.org/Parse-SDK-JS/api/v1.11.0/Parse.Cloud.html#.TriggerRequest

此线程中建议的解决方案感觉不对:Parse Javascript API Cloud Code afterSave with access to beforeSave values

我知道我可以通过beforeSave钩子中的脏方法来做到这一点。但是,这对我不起作用。为什么?如果我确实向许多用户发送推送通知,这需要一些时间。接收推送通知的客户端开始向服务器请求更新的频道对象。然而,他们可能会收到旧版本的对象,因为只要beforeSave还没有完成发送所有推送,通道对象就不会保存在数据库中。

4

1 回答 1

7

您可以使用request.original. 例如:

Parse.Cloud.afterSave("Channel", function(request) {  
    var channel = request.object;
    var channel_orig = request.original;

    if (channel.get("status") != channel_orig.get("status")) {
        // Send push notification.
    }
});

该文档说明了 request.original,即:“如果设置,则对象,如当前存储的那样。” 不过,我不确定在什么情况下会设置它。在我的用例中,它按照上面代码片段中提供的方式工作。

于 2018-01-28T19:07:55.077 回答