尝试运行作业时解析错误代码1内部错误

时间:2015-01-05 21:18:07

标签: javascript parse-platform

我创建了以下工作来清理不需要的记录。我已经简化了下面的代码来解决根本原因,但只有这一点,我运行它的80%以上由于错误代码1“内部错误”而无法找到任何内容:

Parse.Cloud.job('cleanStories', function(request, status) {

  Parse.Cloud.useMasterKey();
  var counter = 0;

  var query = new Parse.Query('Story');
  query.doesNotExist("username");
  query.limit(1000);

  query.find({
    success: function(results) {
      counter += results.length;
      status.success(counter + " stories found.");
    },
    error: function(error) {
      status.error(counter + " stories found. Error: " + error.code + " " + error.message);
    }
  });
});

我目前有大约568k的记录。这几乎是800k,这是我开始运行这项工作来清理记录。它通常运行良好,但自从开始错误一致。我做错了什么?

修改

我已将限制减少到50,并且执行成功率更高。在100(默认)它仍然经常失败。无论如何,我可以将它恢复到1000以更快地完成其余的记录吗?

1 个答案:

答案 0 :(得分:0)

这是基于一个弱理论,即较小的限制将有所帮助(如果它确实是一个超时问题,希望它是每个查询超时而不是每个作业超时,否则这个想法根本没有帮助)。但是这里有一个想法如何使用limit / skip进行大型查找:

function findN(query, results) {
    results = results || [];
    query.skip(results.length);
    return query.find().then(function(findResults) {
        results = results.concat(findResults);
        return (findResults.length === 0)? results : findN(query, results);
    });
}

// to run this, build a query 
var query = new Parse.Query("MyClass");
// qualify the query however you wish
// set any limit up to 1000, but our guess is that yours should be small
query.limit(20);
var results = [];
findN(query, results).then(function(r) {
    console.log("found " + r.length + " rows");
    // r will contain all of the rows matching the query, found 20 at a time
});