javascript - 运行 2 个 Promise 并等待 "done()"

标签 javascript promise q

我尝试同时使用 Promise(使用 Q.js)运行两个不同的函数,并等待两个函数的响应来运行第三个操作。

我想要这样的东西:

run( promise1, promise2).done( callbackForBoth );

我该怎么办?

最佳答案

您可以使用Q.all函数,像这样

Q.all([promise1, promise2]).then(callbackForBoth);

通常,Q.all 后面会跟有 .spread 便捷方法,该方法会传播 Q.all 调用的结果,如下所示函数参数,像这样

Q.all([promise1, promise2]).spread(function(pro1result, pro2result) {
    return callbackForBoth();
});

但这种方法的问题是,如果任何一个 Promise 被拒绝,那么其余的 Promise 将不会被调用。

因此,如果您想确保所有 promise 都得到履行/拒绝,您可以使用 Q.allSettled在这种情况下

Q.allSettled([promise1, promise2]).then(callbackForBoth);

这里我们也可以使用 spread 便捷方法,但粒度更细一些。对于每个 Promise,我们都会得到一个对象,该对象具有 state 属性,让后续的消费者知道 Promise 是被履行还是被拒绝。因此,您可能想像这样使用点差

Q.allSettled([promise1, promise2]).spread(function(pro1result, pro2result) {
    if (pro1result.state === "fulfilled" && pro2result.state === "fulfilled") {
        return callbackForBoth();
    } else {
        throw new Error("Not all of them were successful");
    }
});

关于javascript - 运行 2 个 Promise 并等待 "done()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613338/

相关文章:

javascript - React.createClass 不是一个函数,可能是 webpack 编译错误

javascript - 谷歌地图 LatLng 不是数字

javascript - 如何在刚刚通过 Dexie.js 打开 indexedDB 后获取表?

node.js - Express 框架和 Promises - 从路由处理程序返回什么?

javascript - Q.all() 和 Promise.prototype.all() 方法有什么区别?

javascript - 为什么第二个然后在第一个之前返回?

javascript - 如何检查变量值是增加还是减少并显示增加或减少的数字

javascript - AngularJS Defer.promise 未按预期工作

node.js - 在 Node.js 中使用 q 的空 promise

angularjs - 在AngularJS中使用q的多个链式延迟函数停止返回数据