Javascript Promise.prototype.catch如何在.chain的末尾接收拒绝的承诺?

Javascript Promise.prototype.catch如何在.chain的末尾接收拒绝的承诺?,javascript,Javascript,我知道如果一个.then收到一个被拒绝的承诺,并且它没有处理程序,那么新的承诺。然后返回成为承诺的状态。然后收到() 事实上,我的直觉告诉我,这就是附加在链末尾的.catch如何收到承诺(当所有.then都没有拒绝处理程序时)。然后调用每个。返回原始失败承诺的副本 此外,当我阅读本文时,我得到的印象是,当承诺的执行者或。然后的回调仅返回一个错误对象时,它会以某种方式“跳转”并将该错误对象返回到最近的拒绝处理程序(当然这可能是一个常规的。然后,它有一个回调作为第二个参数或一个.catch())。这

我知道如果一个
.then
收到一个被拒绝的承诺,并且它没有处理程序,那么新的承诺
。然后
返回成为承诺的状态
。然后
收到()

事实上,我的直觉告诉我,这就是附加在
链末尾的
.catch
如何收到承诺(当所有
.then
都没有拒绝处理程序时)。然后调用每个
。返回原始失败承诺的副本

此外,当我阅读本文时,我得到的印象是,当承诺的执行者或
。然后
的回调仅返回一个错误对象时,它会以某种方式“跳转”并将该错误对象返回到最近的拒绝处理程序(当然这可能是一个常规的
。然后
,它有一个回调作为第二个参数或一个
.catch()
)。这两个想法都正确吗

当我读这篇文章的时候,我得到的印象是它会以某种方式“跳跃”

不,这是误导。你的第一个直觉是正确的。当调用
.then(…)
的承诺被拒绝时,
.then(…)
返回的承诺也会被拒绝,依此类推。这实际上甚至需要一些时间(其他承诺处理程序可能会在两者之间运行)

<>当然,逻辑执行流程跳过了“代码”>“/代码>处理程序,在所有被拒绝的允诺下,从这个链运行的下一个东西是<代码> catch <代码>(或<代码>然后/代码>)拒绝处理程序,因此您可能会认为它是“跳”的。,但这实际上只是一个类比,实际上是通过拒绝链条上的每个承诺来实现的


当在
try
/
catch
块中使用带有
async
/
wait
的允诺时,您会得到实际的流量控制跳跃。

这里唯一的“正确”答案是从描述事物的语言开始的多页文本中描述的答案,这是非常混乱的。
。然后
接收到“
。然后()
被执行,一个回调被赋予它,这个回调被一个参数调用。你是说“
。然后
接收”这个回调被一个特定的参数调用吗?@trincot对不起,
。然后
“接收”一个被拒绝的承诺我刚才说的是
被拒绝的承诺。然后
“a.then的回调只是返回一个错误对象”:如果它真的返回了这个错误对象,那么这将实现该对象的承诺。您提到的文章实际上是抛出错误对象,其实质是抛出,而不是抛出错误对象。