你可以像这样使用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 将不会被调用。
所以,如果你想确保所有的承诺都被履行/拒绝,你可以在这种情况下使用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");
}
});