gpt4 book ai didi

javascript - 云代码上的 promise

转载 作者:行者123 更新时间:2023-12-03 10:15:07 25 4
gpt4 key购买 nike

我正在编写一个云代码函数,用于在删除对象后运行许多任务。我怎样才能干净地做到这一点并且不嵌套?

您可以并行运行任务,还是按顺序运行任务更好?如果是这样,怎么办?

这是我的代码,你能帮我清理/更改吗?

Parse.Cloud.afterDelete("Photo", function(request) {
Parse.Cloud.useMasterKey();
//delete all related activities
var queryAct = new Parse.Query("Activity");
queryAct.equalTo("photo",{
__type: "Pointer",
className: "Photo",
objectId: request.object.id
});
queryAct.limit(1000);
queryAct.find({
success: function(activities) {
Parse.Object.destroyAll(activities, {
success: function() {
//delete all related hashtags
var queryTags = new Parse.Query("hashTags");
queryTags.equalTo("photo",{
__type: "Pointer",
className: "Photo",
objectId: request.object.id
});
queryTags.limit(1000);
queryTags.find({
success: function(hashtags) {
Parse.Object.destroyAll(hashtags, {
success: function() {},
error: function(error) {
console.error("Error deleting related hashtags " + error.code + ": " + error.message);
}
});
},
error: function(error){
console.error("Error finding related hashtags " + error.code + ": " + error.message);
}
});
},
error: function(error) {
console.error("Error deleting related activities " + error.code + ": " + error.message);
}
});
},
error: function(error) {
console.error("Error finding related activities " + error.code + ": " + error.message);
}
});
});

谢谢大家!

最佳答案

这里find.then.delete是一系列连续的任务。不过,您可以同时删除hastagsactivities,因为它们似乎并不相关。请查看promises guide了解更多信息。您的代码可以缩短如下:

var Photo = Parse.Object.extend("Photo");

Parse.Cloud.afterDelete("Photo", function(request) {
Parse.Cloud.useMasterKey();

var photo = Photo.createWithoutData(request.object.id);

var queryAct = new Parse.Query("Activity");
queryAct.equalTo("photo", photo);
queryAct.limit(1000);
var promiseForActivities = queryAct.find().then(function (activities) {
return Parse.Object.destroyAll(activities);
});

var queryTags = new Parse.Query("hashTags");
queryTags.equalTo("photo", photo);
queryTags.limit(1000);
var promiseForHashtags = queryTags.find().then(function (hashtags) {
return Parse.Object.destroyAll(hashtags);
});

return Parse.Promise.when([promiseForActivities, promiseForHashtags]).then(function () {
console.log("Done");
}, function (err) {
console.error(err);
});
});

请注意,您不需要创建自己的指针对象,例如:

{
__type: "Pointer",
className: "Photo",
objectId: "someId"
}

您可以使用 createWithoutData这是以下内容的快捷方式:

var Photo = Parse.Object.extend("Photo");
var p = new Photo();
p.id = "someId";

我还认为直接传递 request.object 就足够了,例如 queryAct.equalTo("photo", request.object);

关于javascript - 云代码上的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com