解析云代码:如何调用承诺为异步保存(Parse Cloud Code: How to Invoke

2019-10-18 18:36发布

我是一个新生的编码器这是新来的异步问题。 为了简便起见,我创建了一个简单的例子来说明我的问题。 我有一个运行一个查询,并用结果,称2种云功能的简单功能。 然后它试图.SET值返回的对象和.save()它。 一切似乎都正确执行,除.save()。 我一直在使用的承诺/ .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之间。

谢谢!

Answer 1:

我相信,随着当前正在编码的事情是,result.save()可能会在你的云功能,能够返回调用方式。 我也不能肯定你的成功回调函数中引用时request.params.name将正常工作。

确保您解析的版本支持的承诺,然后尝试举办这样的代码:

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

}

注:上面的代码样本,可能无法正常工作的。

信息来源:

  • 一般承诺: http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/
  • 使用。当()多承诺一次: https://www.parse.com/questions/parsepromisewhen-doesnt-work


文章来源: Parse Cloud Code: How to Invoke Promises for Async Saving