Javascript 解析云代码:如何调用异步保存承诺
我是一个初出茅庐的程序员,不熟悉异步问题。为了简单起见,我创建了一个快速示例来说明我的问题。我有一个简单的函数,它运行一个查询,并根据查询结果调用另外两个云函数。然后,它尝试为返回的对象设置.set值,并将其保存为.save()。除了.save()之外,所有操作似乎都正确执行。我尝试过使用promises/.thens和其他一些技巧,但都没有效果。如果有人能提供最简单、最直接的解决方案,我将不胜感激Javascript 解析云代码:如何调用异步保存承诺,javascript,asynchronous,parse-platform,promise,Javascript,Asynchronous,Parse Platform,Promise,我是一个初出茅庐的程序员,不熟悉异步问题。为了简单起见,我创建了一个快速示例来说明我的问题。我有一个简单的函数,它运行一个查询,并根据查询结果调用另外两个云函数。然后,它尝试为返回的对象设置.set值,并将其保存为.save()。除了.save()之外,所有操作似乎都正确执行。我尝试过使用promises/.thens和其他一些技巧,但都没有效果。如果有人能提供最简单、最直接的解决方案,我将不胜感激 Parse.Cloud.define("test", function(request,resp
Parse.Cloud.define("test", function(request,response){
query.equalTo("name",request.params.name);
query.first(
success: function(result){
result.set("testAverage", Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"test"}));
result.set("quizAverage", Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"quiz"}));
result.save();
},
error: function(){
response.error("error");
}
);
return result;
});
另外,在我的实际场景中,有10-20个对其他云函数的并行调用,而不仅仅是2个
谢谢 我相信,按照您当前的编码方式,可能会在云函数返回之前调用result.save()。我也不确定request.params.name在成功回调函数中被引用时是否能正常工作 确保您的parse版本支持承诺,然后尝试按如下方式组织代码:
function queryTestAverage(name) {
return Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"test"});
}
Parse.cloud.define("test", function(request, response) {
query.equalTo("name", request.params.name);
return query.first()
})
.then(function(results) {
var name = results.get("name");
Parse.Promise.when([queryTestAverage(name), queryQuizAverage(name)]).then(
function(result1, result2) {
results.set("testAverage", result1);
results.set("quizAverage", result2);
results.save();
}
}
注意:以上代码用于示例,可能无法正常工作
信息来源:
- 一般承诺:
- 将.when()同时用于多个承诺:
中的回调函数。那么应该更好地返回承诺,以便更好地重用。