gpt4 book ai didi

parse-platform - 在保存前解析检查原始对象

转载 作者:行者123 更新时间:2023-12-02 04:16:23 25 4
gpt4 key购买 nike

我需要在保存之前检查原始对象以查看值发生了变化。目前我有这个:

Parse.Cloud.beforeSave("Stats", function(request, response) {
if (!request.object.isNew()){
var query = new Parse.Query("Stats");
query.get(request.object.id, {
success: function(oldObject) {
alert('OLD:' + oldObject.get("Score") + "new:" + request.object.get("Score"));
/*Do My Stuff Here*/
response.success();
},
error: function(oldObject, error) {
response.error(error.message);
}
});
}else{
response.success();
}

});

问题是 oldObject 等于 request.object

警报结果是这样的:OLD:10 new:10,但真正的旧分数是5。另外根据之前保存的输入日志,原来确实是5

知道我做错了什么吗?

编辑:这是之前的保存日志。

before_save triggered for Stats as master:
Input: {"original":{"achievements":[],"Score":"100"updatedAt":"2015-11-02T10:09:24.170Z"},"update":{"Score":"110"}}
Result: Update changed to {"Score":"110"}

编辑2:有没有办法获取脏值?

console.log("dirty: "+ request.object.dirty("score"));
I2015-11-03T14:23:12.198Z]dirty: true

最佳答案

了解字段是否被修改的官方方法是调用dirty()

我的猜测是,查询该特定对象会以某种方式更新当前范围内该对象的所有“实例”,这就是 dirty() 仅在调用之前 查询。

同时获取旧值和新值的一个选项是将其保存在单独的字段中。例如,您可以从您的客户端调用(伪编码,但您明白了):

// OldScore here is 0
statObject.put("Score") = 100;
statObject.saveInBackground();

然后在云代码中:

Parse.Cloud.beforeSave("Stats", function(request, response) {

var stat = request.object;
if (!stat.isNew()){
if (stat.dirty("Score")) {
var newValue = stat.get("Score") // 100
var oldValue = stat.get("OldScore") // 0

// Do other stuff here

stat.put("OldScore", newValue);
response.success();

} else {
response.success();
}
} else {
response.success();
}
});

但是您描述的问题有点奇怪。也许你可以尝试使用 fetch() 命令;它应该返回旧值。然而,它将使所有其他脏字段无效。

关于parse-platform - 在保存前解析检查原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33474296/

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