我编写了一个云代码来更改表格中的布尔值。代码正在执行,值也会更新。但问题是我在控制台中打印出以下错误。我担心如果行数增加可能会导致问题。以下是在控制台上打印的错误
I2015-09-15T06:15:48.317Z]v11: Ran job hello with:
Input: {}
Failed with: Error: Job status message must be a string
at updateJobMessageAndReturn (<anonymous>:1157:7)
at Object.success (<anonymous>:1211:9)
at e.obj.save.success (main.js:25:30)
at e.<anonymous> (Parse.js:12:27827)
at e.s (Parse.js:12:26759)
at e.n.value (Parse.js:12:26178)
at e.<anonymous> (Parse.js:12:26831)
at e.s (Parse.js:12:26759)
at e.n.value (Parse.js:12:26178)
at e.s (Parse.js:12:26887)
以下是云代码:
Parse.Cloud.job("hello", function(request, response) {
Parse.Cloud.useMasterKey();
var presentDate = new Date();
// presentDate.setDate(presentDate.getDate()-1);
presentDate.setHours(0,0,0,0);
var usersValid = new Parse.Query(Parse.User);
usersValid.equalTo("emailVerified", true);
//usersValid.greaterThan("updatedAt", presentDate);
var users = new Parse.Query("Properties");
users.matchesQuery("user",usersValid);
users.equalTo("verified", false);
users.limit(1000);
users.find({
success: function(results) {
console.log("Total new properties "+ results.length);
for (var i = 0; i < results.length; i++) {
var obj = results[i];
obj.set("verified", true);
obj.save(null,{
success: function (object) {
console.log("Success - "+i);
response.success(object);
},
error: function (object, error) {
console.log("Failed - "+i);
response.error(error);
}
});
}
},
error: function(error) {
console.log("failed");
}
});
答案 0 :(得分:3)
致电时
response.success(object);
你正在传递刚刚保存的完整对象 - 但你不应该这样做。您只需使用简单的状态字符串(如success
)或使用保存对象中的某些元素(如对象ID)调用'OK'
。
更严重的问题是,您在查询中请求了1000个项目,然后单独更新并保存每个项目 - 而在保存完成处理程序中,您正在调用success
或error
。因此,只要保存了这1000个对象中的第一个,就会告诉它完成的工作,它可以停止处理剩下的工作。
您应该更改您的工作以使用promises而不是旧式回调,并且您应该将所有保存承诺放入一个数组并等待它们在循环之后完成,然后再调用success
或{{1} }。