Javascript 已拒绝带有.catch()的承诺,但在promise.AllSetted中显示为已履行

Javascript 已拒绝带有.catch()的承诺,但在promise.AllSetted中显示为已履行,javascript,promise,Javascript,Promise,这是问题的简化版本 有一些承诺,很少有.then()链,还有用于错误处理的.catch()块; 每个承诺可能会解决或拒绝,因此我使用promise.allSetted根据它们在数组中的顺序和状态来知道哪个承诺失败了;当所有承诺都得到解决时,它可以正常工作,但当一个承诺被拒绝时,它的状态将在承诺中显示为“已履行”;如果我删除.catch()块,它将按预期工作,但我们需要保留.catch()块以登录到存储;那么,为什么它的行为不符合预期呢?是否有任何方法使其显示带有.catch()块的“已拒绝”状态

这是问题的简化版本

有一些承诺,很少有
.then()
链,还有用于错误处理的
.catch()
块;
每个承诺可能会解决或拒绝,因此我使用
promise.allSetted
根据它们在数组中的顺序和状态来知道哪个承诺失败了;当所有承诺都得到解决时,它可以正常工作,但当一个承诺被拒绝时,它的状态将在
承诺中显示为“已履行”;如果我删除
.catch()
块,它将按预期工作,但我们需要保留
.catch()
块以登录到存储;那么,为什么它的行为不符合预期呢?是否有任何方法使其显示带有
.catch()
块的“已拒绝”状态

let a=Promise.resolve(“a:Promise.resolved”).then(response=>response.catch(err=>console.log(err));
让b=Promise.reject(“b:Promise.rejected”)。然后(response=>response);//无错误处理
让e=Promise.reject(“e:Promise.rejected”)。然后(response=>response.catch(err=>console.log(err));
Promise.allSettled([a,b,e]),然后(values=>console.log(values))您可以从
catch
块抛出错误,以便在
catch
中不处理错误:

let a=Promise.resolve(“a:Promise.resolved”).then(response=>response.catch(err=>console.log(err));
让b=Promise.reject(“b:Promise.rejected”)。然后(response=>response);//无错误处理
让e=Promise.reject(“e:Promise.rejected”)。然后(response=>response)。catch(err=>{
控制台日志(err);
犯错误;
//还是拒绝承诺
//返回承诺。拒绝(错误)
});

Promise.allSettled([a,b,e]),然后(values=>console.log(values))是的,现在我明白了,我们
.catch()
它!
因此,通过使用
.catch()
(或在
中使用catch try{}catch(e){}
),我们告诉程序:“不要惊慌,一切都在控制之中”,“我会处理的”。现在这是有道理的。如果我们在处理过程中不出错,听起来一切都很好;所以,是的,为什么不;它应该是
实现的

“那么为什么它的行为不符合预期呢?”如果您捕获了w/o rethrow,那么“预期”不会有错误。