javascript - Parse.Query.each() 链式 promise

标签 javascript parse-platform promise parse-cloud-code

我正在 Parse.com CloudCode 上编写一个后台作业函数。该作业需要使用不同的参数多次调用相同的函数(包括 Parse.Query.each() 调用),并且我想将这些调用与 Promise 链接起来。这是我到目前为止所拥有的:

Parse.Cloud.job("threadAutoReminders", function(request, response) {

    processThreads(parameters1).then(function() {
        return processThreads(parameters2);
    }).then(function() {
        return processThreads(parameters3);
    }).then(function() {
        return processThreads(parameters4);
    }).then(function() {
        response.success("Success");
    }, function(error) {
        response.error(JSON.stringify(error));
    });
});

下面是processThreads()函数:

function processThreads(parameters) {

    var threadQuery = new Parse.Query("Thread");
    threadQuery... // set up query using parameters

    return threadQuery.each(function(thread) {
        console.log("Hello");
        // do something
    });
}

我的问题是:

  • 我是否正确使用 Promise 来链接函数调用?
  • threadQuery.each() 返回零结果时会发生什么情况? promise 链会继续执行吗?我这么问是因为目前“Hello”永远不会被记录..

最佳答案

Am I chaining function calls using promises correctly?

是的。

What happens in threadQuery.each() returns zero results? Will the promise chain continue with execution? I'm asking because at the moment "Hello" never gets logged.

我认为我的说法是正确的,如果“做某事”是同步的,那么只有在以下情况下才会发生零“Hello”消息:

  • 在记录可能的“Hello”之前,“做某事”中发生 Uncaught Error ,或者
  • 每个阶段都不会给出任何结果(怀疑您的数据、查询或期望)。

您可以通过捕获 Uncaught Error 来免疫它们。由于 Parse Promise 不是抛出安全的,因此您需要手动捕获它们:

function processThreads(parameters) {
    var threadQuery = new Parse.Query("Thread");
    threadQuery... // set up query using parameters
    return threadQuery.each(function(thread) {
        console.log("Hello");
        try {
            doSomething(); // synchronous
        } catch(e) {
            //do nothing
        }
    });
}

这应该确保迭代继续并返回已履行的 promise 。

关于javascript - Parse.Query.each() 链式 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635151/

相关文章:

javascript - 创建新的 Mongodb 文档与推送到文档数组

javascript - 使用Javascript 修改HTML 代码中的mso 注释?

android - ParseObject pinInBackground 返回空 objectId

javascript - 如何使用 Interval-Promise Node.js 模块链接 Promise?

javascript - 如何解决 for 循环中的所有 promise ?

javascript - “Read more” 切换不是字符数量而是句子长度

javascript - 为什么没有为此 MediaStreamTrack 触发 'ended' 事件?

java - 无法将数据保存到 Parse.com 云服务

java - Facebook/Parse 登录行为异常 : The proxied app is not already installed

node.js - Discord.js:按 ID 获取消息给出错误的输出