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的回调只是返回一个错误对象”:如果它真的返回了这个错误对象,那么这将实现该对象的承诺。您提到的文章实际上是抛出错误对象,其实质是抛出,而不是抛出错误对象。