1

我是一个刚接触异步问题的新手。为简单起见,我创建了一个快速示例来说明我的问题。我有一个简单的函数,它运行一个查询并使用结果调用其他 2 个云函数。然后它会尝试为返回的对象设置 .set 值并对其进行 .save() 处理。一切似乎都正确执行,除了 .save()。我尝试过使用 promises/.thens 和其他一些技巧,但没有任何效果。如果有人可以提供最简单直接的解决方案,我将不胜感激。

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;
}); 

PS 在我的实际场景中,对其他云功能的并行调用在 10-20 之间,而不仅仅是 2。

谢谢!

4

1 回答 1

2

我相信以您当前编码的方式,可能会在您的云函数能够返回之前调用 result.save()。我也不确定 request.params.name 在成功回调函数中引用时是否能正常工作。

确保您的 parse 版本支持 Promise,然后尝试像这样组织您的代码:

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();
        }

}

注意:以上代码仅供示例,可能无法按原样工作。

信息来源:

于 2013-10-22T01:27:56.323 回答