解析服务器每个查询等到当前作业完成
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);
考虑到您提供的上下文太少,也很难真正为您提供帮助。
这是我的代码:
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);
考虑到您提供的上下文太少,也很难真正为您提供帮助。