2

我正在运行批处理作业,我希望它们为每个查询结果连续运行问题是 query.each 似乎并行执行所有内容

如何更改我的代码以使所有内容都按顺序执行?

Parse.Cloud.job("fetchMenus", function(request, status) {

  var counter = 0;
  // Query for all users
  var LocationSP = Parse.Object.extend("Location");
  var query = new Parse.Query(LocationSP);
  query.doesNotExist("menu");
  query.equalTo("city_lc","new york");
  // query.limit(10);
  var p = Parse.Promise.as("");

  query.each(function(location) {

    p = p.then(function(){

    if (counter % 100 === 0) {
        // Set the  job's progress status
        status.message(counter + " users processed.");
      }
    // console.log(location);
    // console.log(location.get("location_id"));

        Parse.Cloud.run('getMenu2', {alias: location.get("location_id") }, {
          success: function(result) {
            // result is 'Hello world!'
            counter += 1;
            return Parse.Promise.as("1");
          },
          error: function(error) {
            return Parse.Promise.as("1");
          }
        });
    })

    return p;


  }).then(function() {
    // Set the job's success status
    status.success("Migration completed successfully.");
  }, function(error) {
    // Set the job's error status
    status.error("Uh oh, something went wrong." + error);
  });
});
4

1 回答 1

2

两者都query.each返回Parse.Cloud.run一个承诺,因此您可以简单地编写如下:

Parse.Cloud.job("fetchMenus", function(request, status) {
  var LocationSP, counter, query;
  counter = 0;
  LocationSP = Parse.Object.extend("Location");
  query = new Parse.Query(LocationSP);
  query.doesNotExist("menu");
  query.equalTo("city_lc", "new york");
  return query.each(function(location) {
    if (counter % 100 === 0) {
      status.message(counter + " users processed.");
    }
    return Parse.Cloud.run('getMenu2', {
      alias: location.get("location_id")
    }).then(function(result) {
      counter += 1;
      return Parse.Promise.as("1");
    }, function(error) {
      return Parse.Promise.as("1");
    });
  }).then(function() {
    return status.success("Migration completed successfully.");
  }, function(error) {
    return status.error("Uh oh, something went wrong." + error);
  });
});
于 2014-11-28T17:44:52.630 回答