解析服务器每个查询等到当前作业完成

Parse server each query wait until current job is done

这是我的代码:

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

  var friendshipQuery = new Parse.Query("Friendship");
  friendshipQuery.each((friendship) => {

    var innerQuery1 = new Parse.Query("Friendship");
    innerQuery1.equalTo("user1", friendship.get("user1"));
    innerQuery1.equalTo("user2", friendship.get("user2"));

    var innerQuery2 = new Parse.Query("Friendship");
    innerQuery2.equalTo("user1", friendship.get("user2"));
    innerQuery2.equalTo("user2", friendship.get("user1"));

    var findPS = Parse.Query.or(innerQuery1, innerQuery2)
    .notEqualTo("objectId", friendship.id)
    .find()
    .then(function(objects) {
      console.log("did found");
      if (objects.length > 0) {
        //delete deplicated objects
        Parse.Object.destroyAll(objects);
      }
    })
    return Parse.Promise.when(findPS);
  }).then(function() {
      status.success("I just finished");
    }, function(error) {
      status.error("There was an error");
    })
  });

我的代码工作正常,但我需要更新它以便: 下一个each(friendship)只有在当前一个已经完成删除找到的对象时才会被处理,所以流程将是这样的:

get first object => find duplicated objects => delete found objects => get the second object => find duplicated objects => delete them => get the this one ...

如果一个 promise 块到达块的末尾,并且没有返回另一个 promise,它会自动 returns 一个空的已解决的 promise。所以,我会将 .find() 更改为 return findPs.find().../*rest of code there*/

假设

Parse.Object.destroyAll(objects);

是异步的,简单地返回销毁承诺就可以了。

return Parse.Object.destroyAll(objects);

考虑到您提供的上下文太少,也很难真正为您提供帮助。