如何知道 Parse Cloud Code afterSave 挂钩中的值是否发生变化?

How to know if value changed in Parse Cloud Code afterSave hook?

每当我的对象的单个键的值在解析云代码 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 尚未完成发送所有推送,通道对象就不会保留在数据库中。

您可以使用 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 的文档说明: "If set, the object, as currently stored." 不过,我不确定在什么情况下会设置它。在我的用例中,它按照上面的代码片段中提供的方式工作。