簡體   English   中英

限速parse.com后台作業

[英]Rate limiting parse.com background jobs

我在parse.com中有一些數據需要通過后台作業進行更新。 大約有一百行。 更新每行將使用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();
    });
});

我認為我無法在此代碼上輕松使用setTimeoutsetInterval (我甚至不確定在parse.com雲代碼上是否允許使用它們)。 JS不支持sleep()wait()

嘗試使用Parse.Object.saveAll一次保存所有對象,還可以按順序將Parse Promise鏈接為@ mbm29414,如果您在forEach循環中需要其他查詢,則將其串聯。

以下代碼段顯示了使用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();
    });
});

我認為您的問題是您正在以同步方式返回status.success() ,而不是等待代碼循環完成。

嘗試以下操作(從在一系列文章中鏈接Parse Promise修改而成):

Parse.Cloud.job("UpdateData", function (request, status) {
  Parse.Cloud.useMasterKey();
  var query = new Parse.Query("Table");
  query.find().then(function (rows) {
      var promise = Parse.Promise.as();
      _.each(rows, function(row) {
          promise = promise.then(function () {
              row.set(...);
              return row.save();              
          });
      });
  }).then(function () {
      // All got saved
      status.success();

  }, function (error) {
      // Something went wrong somewhere
      status.error(error);

  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM