如何知道在 Parse Cloud Code afterSave 钩子中的值是否改变?

fun*_*len 4 javascript after-save before-save parse-cloud-code parse-server

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

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

如何检查密钥的值是否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尚未完成发送所有推送,通道对象就不会持久保存在数据库中。

小智 6

您可以使用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.
    }
});
Run Code Online (Sandbox Code Playgroud)

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