如果在等待的承诺之一中抛出错误,是否有任何方法可以停止P.all的执行?
在此示例中,我希望在“ A-1000”之后而不是在“ B-100000”之后看到“ THE_END”
const P = require("bluebird");
const p1 = P.resolve().then(() => {
for(let i = 0 ; i <= 1000 ; i++) {
console.log("A - ", i);
}
return Promise.reject(new Error('error'))
});
const p2 = P.resolve()
.then(() => {
for(let i = 0 ; i <= 100000 ; i++) {
console.log("B - ", i);
}
});
return P.all([p1, p2])
.catch(() => console.error("THE_END"));
答案 0 :(得分:0)
使用P.some
而不是使用P.all
并传递承诺数量:
如果太多的承诺被拒绝,从而使该承诺永远无法兑现,则将立即以
AggregateError
拒绝原因(按其提交顺序)将其拒绝。
即
return P.all([p1, p2], 2).catch(() => console.error('error'));
但是请注意,您的假设示例无论如何都无法按预期运行,因为您反复console.log
的“忙循环”会阻塞浏览器的事件循环。
答案 1 :(得分:-1)
是的,例如,您可以添加一个函数来在执行P.all之前检查二进制变量是否设置为0。然后,例如,当它被调用一次时,您可以将其设置为1。