【问题标题】:Parse Cloud Code: How to Invoke Promises for Async Saving解析云代码:如何调用 Promise 进行异步保存
【发布时间】:2013-10-22 09:27:56
【问题描述】:

我是一个刚接触异步问题的新手。为简单起见,我创建了一个快速示例来说明我的问题。我有一个简单的函数,它运行一个查询并使用结果调用其他 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;
}); 

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

谢谢!

【问题讨论】:

    标签: javascript asynchronous parse-platform promise


    【解决方案1】:

    我相信以您当前编写代码的方式,可能会在您的云函数能够返回之前调用 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();
            }
    
    }
    

    注意:以上代码仅供参考,可能无法正常工作。

    信息来源:

    【讨论】:

    • 另外,你提到你有 10-20 个并行调用......我对 parse 以及它是否为你做这个优化不是很熟悉,但我会考虑创建一个超级函数来包装所有这些功能都在一次调用中,因此您只需访问服务器一次。
    • 我尝试过这样做,但效果不佳。我使用“结果”而不是“结果”,虽然查询返回了结果,但如果我尝试 .get() 任何属性,它会返回“未定义”。 .save() 也不起作用。我还在 parse 博客上发布了一个更深入的示例:parse.com/questions/…
    • .then 中的回调函数应该更好地return promises 以便更好地重用。
    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多