解析:作业状态消息必须是字符串

Parse: job status message must be a string

我写了一个云代码来改变table中的一个布尔值。代码正在执行,值也正在更新。但问题是我在控制台中打印了以下错误。如果行数增加,我担心这是否会导致问题。以下是控制台上打印的错误

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");
        }
    });

当你打电话时

response.success(object);

您正在传递刚刚保存的完整对象 - 但您不应该传递。您可以只使用简单的状态字符串调用 success,例如 'OK',或者使用已保存对象中的某些元素,例如其对象 ID。

更严重的问题是您在查询中请求 1000 个项目,然后分别更新和保存每个项目 - 在保存完成处理程序中您调用 successerror。因此,一旦这 1000 个对象中的第一个被保存,您就告诉作业它已经完成并且它可以停止处理其余的。

您应该更改您的工作以使用承诺而不是旧式回调,并且您应该将所有保存承诺放入一个数组中并等待它们在循环之后完成,然后再调用 successerror.