我尝试同时使用 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/