gpt4 book ai didi

javascript - 如何阻止多个异步 Parse 云调用直到完成?

转载 作者:行者123 更新时间:2023-12-03 09:33:55 25 4
gpt4 key购买 nike

我正在尝试在 Parse.com 云函数上的 Javascript 中实现类似于以下内容的功能:

Parse.Cloud.define("GatherThings", function(req, res) {
var array_whatToGet = req.params.getThese;
var returnVal = {};

if(array_whatToGet.indexOf("Thing1") > -1) {
Parse.Cloud.run("GetThing1", {}, {
success: function(results) {
returnVal['Thing1'] = results;
} //ignoring error for now
}
}

if(array_whatToGet.indexOf("Thing2") > -1) {
Parse.Cloud.run("GetThing2", {}, {
success: function(results) {
returnVal['Thing2'] = results;
} //ignoring error for now
}
}

if(array_whatToGet.indexOf("Thing3") > -1) {
Parse.Cloud.run("GetThing3", {}, {
success: function(results) {
returnVal['Thing3'] = results;
} //ignoring error for now
}
}

res.success(retVal);
}

除了这里可能的语法错误之外,当我尝试执行类似的操作时,我可以让每个调用的云函数运行,但由于这些云函数的异步质量,我总是在任何操作完成之前到达 retVal。

我可以以某种方式链接或阻止它们,使它们不依赖于另一个运行,但最终返回取决于一切是否已完成?

最佳答案

这正是 Promise 的用途。所有 Parse 函数都返回 Promise,可以为它提供一个在完成时运行的方法。 Parse.Promise.when() 接受一个 Promise 数组,并在所有传递的 Promise 都满足时实现。我们会这样使用它:

// underscore.js is a great general purpose utility, mostly self-explanatory
var _ = require('underscore');

Parse.Cloud.define("GatherThings", function(req, res) {
var things = ["Thing1", "Thing2", "Thing3"];
var array_whatToGet = req.params.getThese;
var promises = [];
_.each(things, function(thing) {
if (_.contains(array_whatToGet, thing)) {
promises.push(getThing(thing));
}
});
Parse.Promise.when(promises).then(function(result) {
res.success(result);
}, function(error) {
res.error(error);
});
});

问题没有提及 GetThing1、GetThing2 和 GetThing3 是什么,但暗示它们是其他云函数。从云端调用 Cloud.run 充其量是不必要的。让我们假设事物指定了一些要查询的对象,并创建一个常规的非云函数,该函数返回执行查询的 promise (查询方法都这样做)。

function getThing(aThing) {
var query = new Parse.Query("MyClass");
query.equalTo("theThingProperty", aThing);
// query.first() returns a promise that is fulfilled when the query is complete
return query.first();
}

关于javascript - 如何阻止多个异步 Parse 云调用直到完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31395762/

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