Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 速率限制parse.com后台作业_Javascript_Parse Platform - Fatal编程技术网

Javascript 速率限制parse.com后台作业

Javascript 速率限制parse.com后台作业,javascript,parse-platform,Javascript,Parse Platform,我在parse.com中有一些数据需要通过后台作业更新。大约有100排。更新每一行使用3个解析api查询。每秒只允许我进行30次查询,因此每次运行作业时,只有前9行得到更新,而在这一秒访问系统的任何用户都会出错 有没有一种简单的方法可以在作业中设置暂停,使其在大约200毫秒后只更新一行,然后作业只使用可用查询的一半?这意味着作业将需要大约20秒的时间来运行,而不是仅仅一秒钟,但这是一个完全可以接受的折衷方案 代码的结构大致如下: Parse.Cloud.job("UpdateData", fun

我在parse.com中有一些数据需要通过后台作业更新。大约有100排。更新每一行使用3个解析api查询。每秒只允许我进行30次查询,因此每次运行作业时,只有前9行得到更新,而在这一秒访问系统的任何用户都会出错

有没有一种简单的方法可以在作业中设置暂停,使其在大约200毫秒后只更新一行,然后作业只使用可用查询的一半?这意味着作业将需要大约20秒的时间来运行,而不是仅仅一秒钟,但这是一个完全可以接受的折衷方案

代码的结构大致如下:

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();

  (new Parse.Query("Table"))
    .find()
    .then(function (rows) {
      rows.forEach(function (row) {
        // Some queries happen here
        ...
        row
          .set(...)
          .save();
      });
      status.success();
    }, function (error) {
      status.error();
    });
});

我认为我不能在这段代码上轻易地使用
setTimeout
setInterval
(我甚至不确定parse.com云代码是否允许使用它们)。JS不支持任何类似于
sleep()
wait()

的功能,我认为您的问题在于您正在以同步方式返回
status.success()
,而不是等待代码循环完成

尝试此选项(从中修改):


我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成

尝试此选项(从中修改):


我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成

尝试此选项(从中修改):


我认为您的问题在于,您正在以同步方式返回
status.success()
,而不是等待代码循环完成

尝试此选项(从中修改):


尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列

下面的代码片段显示了使用
Parse.object.saveAll
一次保存对象的简单示例:

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();

  (new Parse.Query("Table"))
    .find()
    .then(function (rows) {
      var toSaveList = [];
      var promise = new Parse.Promise();
      rows.forEach(function (row) {
        // Some queries happen here
        ...
        row.set(...);
        ...
        toSaveList.push(row)
      });
      Parse.Object.saveAll(toSaveList, function() {
        promise.resolve();
      }, function() {
        promise.reject();
      });
      return promise;
    })
    .then(function() {
      status.success();
    }, function() {
      status.error();
    });
});

尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列

下面的代码片段显示了使用
Parse.object.saveAll
一次保存对象的简单示例:

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();

  (new Parse.Query("Table"))
    .find()
    .then(function (rows) {
      var toSaveList = [];
      var promise = new Parse.Promise();
      rows.forEach(function (row) {
        // Some queries happen here
        ...
        row.set(...);
        ...
        toSaveList.push(row)
      });
      Parse.Object.saveAll(toSaveList, function() {
        promise.resolve();
      }, function() {
        promise.reject();
      });
      return promise;
    })
    .then(function() {
      status.success();
    }, function() {
      status.error();
    });
});

尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列

下面的代码片段显示了使用
Parse.object.saveAll
一次保存对象的简单示例:

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();

  (new Parse.Query("Table"))
    .find()
    .then(function (rows) {
      var toSaveList = [];
      var promise = new Parse.Promise();
      rows.forEach(function (row) {
        // Some queries happen here
        ...
        row.set(...);
        ...
        toSaveList.push(row)
      });
      Parse.Object.saveAll(toSaveList, function() {
        promise.resolve();
      }, function() {
        promise.reject();
      });
      return promise;
    })
    .then(function() {
      status.success();
    }, function() {
      status.error();
    });
});

尝试
Parse.Object.saveAll
一次保存所有对象,如果您需要forEach循环中的其他查询,还可以像@mbm29414所提到的那样将解析承诺连成一系列

下面的代码片段显示了使用
Parse.object.saveAll
一次保存对象的简单示例:

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();

  (new Parse.Query("Table"))
    .find()
    .then(function (rows) {
      var toSaveList = [];
      var promise = new Parse.Promise();
      rows.forEach(function (row) {
        // Some queries happen here
        ...
        row.set(...);
        ...
        toSaveList.push(row)
      });
      Parse.Object.saveAll(toSaveList, function() {
        promise.resolve();
      }, function() {
        promise.reject();
      });
      return promise;
    })
    .then(function() {
      status.success();
    }, function() {
      status.error();
    });
});

你确定背景工作就是这样吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定,如果这是为什么,但我的工作是查找168行,然后只更新前9行。你确定后台工作是这样工作的吗?我以为你每20req/sec有一个作业,作业上有其他限制,但不是req/sec限制。否则,上述情况将非常普遍。我不确定这是为什么,但我的工作是查找168行,然后只更新前9个。使用
saveAll
是一个好得多的主意-这是我现在实现的。使用
saveAll
是一个好得多的主意-这是我现在实现的。使用
saveAll
是一个好得多的主意-这是我现在实现的这就是我现在实现的。