Javascript 拒绝状态在承诺中执行后,剩余承诺也在程序中执行?

Javascript 拒绝状态在承诺中执行后,剩余承诺也在程序中执行?,javascript,node.js,promise,Javascript,Node.js,Promise,我正在使用promise代码,特别是在我调用的拒绝状态函数中使用了promise.all(),因此一旦执行了拒绝(失败)状态,它将捕获错误消息,其余的承诺不应执行。这是承诺中的规则。但是在我的代码中,我调用了拒绝状态。Catch函数捕获错误消息。好的。但控制权再次转到其他承诺,并在我的代码中打印日志语句。有人能解释为什么吗 var p1=新承诺(函数(解析、拒绝){ setTimeout(函数(){ console.log(“一个花花公子”); 决议(“一”); }, 3000); }); v

我正在使用promise代码,特别是在我调用的拒绝状态函数中使用了
promise.all()
,因此一旦执行了拒绝(失败)状态,它将捕获错误消息,其余的承诺不应执行。这是承诺中的规则。但是在我的代码中,我调用了拒绝状态。Catch函数捕获错误消息。好的。但控制权再次转到其他承诺,并在我的代码中打印日志语句。有人能解释为什么吗

var p1=新承诺(函数(解析、拒绝){
setTimeout(函数(){
console.log(“一个花花公子”);
决议(“一”);
}, 3000);
});
var p2=新承诺(功能(解决、拒绝){
setTimeout(函数(){
拒绝(“两”);
}, 1000);
});
var p3=新承诺(功能(解决、拒绝){
setTimeout(函数(){
控制台日志(“三个家伙”);
决议(“三”);
}, 4000);
});
所有([p1,p2,p3])。然后(函数(msg){
控制台日志(msg);
}).catch(函数(err){
返回console.log(err);

});您的三个预期设置超时彼此独立

一个人拒绝的事实对两个人的决心没有影响。三个承诺构造函数中的每一个都将执行,而不管其他构造函数中发生了什么,也不管承诺是否与
promise.all()
聚合,都将执行

使用
Promise.all()
进行聚合可以查看承诺的最终结算,而不会影响导致结算的(通常是异步的)活动

考虑到所有这些因素(以及传递给SetTimeout的时间值),您会(我希望)看到:

  • 两个(1秒后)
  • 一个花花公子(3秒后)
  • 三个家伙(4秒后)

不确定阅读内容和位置,但拒绝承诺时唯一未执行的代码是链接到承诺的履行处理程序中的代码。在您的例子中,这就是
console.log(msg)。拒绝承诺不会影响其他独立代码的任何操作。“一个dude”和“三个dude”在返回承诺之前会被控制台记录,因此很明显,它将被打印为可能的副本