在云代码中,串行调用Parse.Cloud.run函数不止一次

时间:2015-09-24 18:48:41

标签: parse-platform promise cloud-code

假设你有一个"定义" Parse.com云代码功能......

Parse.Cloud.define("exampleDefineFunction", function(request, response)
    {
    ...
    response.success("ok")
    ...
    response.error("doh")
    });

我想制作另一个云代码功能,

调用函数多次定义函数

等待下一个,就像在serial promise chain

中一样

可以这样做吗?

2 个答案:

答案 0 :(得分:3)

我认为这应该可以解决问题!

在这种情况下,我们希望使用Parse.Promise.when()

  

返回在所有输入承诺时履行的新承诺   得到了解决。如果列表中的任何承诺失败,则返回   承诺将失败,最后一个错误。如果他们都成功了,那么   返回的承诺将成功,结果是结果   所有输入承诺

我试图让它相当自我记录,但如果您有任何问题,请告诉我。希望这有帮助!

// The promise chain for bulk image collection
Parse.Cloud.define("fetchBulkImages", function(request, response) {

    // Array of URLs
    var urls = request.object.get("urls");

    // Array of promises for each call to fetchImage
    var promises = [];

    // Populate the promises array for each of the URLs
    _.each(urls, function(url) {
        promises.push(Parse.Cloud.run("fetchImage", {"url":url}));
    })

    // Fulfilled when all of the fetchImage promises are resolved
    Parse.Promise.when(promises).then(function() {
        // arguments is a built-in javascript variable 
        // will be an array of fulfilled promises
        response.success(arguments);
    },
    function (error) {
        response.error("Error: " + error.code + " " + error.message);
    });

});

// Your scraping function to load each individual image
Parse.Cloud.define("fetchImage", function(request, response) {
    ...
    response.success("image successfully loaded")
    ...
    response.error("Error: " + error.code + " " + error.message);
});

答案 1 :(得分:1)

您是否考虑过使用beforeSave cloud hook进行预先保存检查?

在一次执行一个方面,你可以考虑使用serial promise chain排队你需要的任何东西。如果承诺得到解决或拒绝,每个承诺都会拥有它自己的一对回调。

此外,当前设置似乎会迅速导致您达到API请求限制。您是否考虑过使用URL数组执行单个查询以将其作为约束进行检查。通过这一个查询,您将知道数组中的哪些项已经存在。