Javascript es6承诺:承诺中抛出的异常不会被catch方法捕获

Javascript es6承诺:承诺中抛出的异常不会被catch方法捕获,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,下面的代码 const run=async()=>{ 试一试{ const p=Promise.reject() p、 catch(()=>console.log('exception capted')) 等待p console.log('流已完成') }抓住{ console.log('流中断') } } run()你在那里分叉你的链条。(哇,听起来很奇怪…) 您正在做与此等效的操作: const p = Promise.reject(); p.catch(...); p.catch(...

下面的代码

const run=async()=>{
试一试{
const p=Promise.reject()
p、 catch(()=>console.log('exception capted'))
等待p
console.log('流已完成')
}抓住{
console.log('流中断')
}
}

run()
你在那里分叉你的链条。(哇,听起来很奇怪…)

您正在做与此等效的操作:

const p = Promise.reject();
p.catch(...);
p.catch(...);
这是承诺链中的两个分开的叉,它们将被单独捕获
p
被拒绝,
p.catch
p.catch
之后的任何内容恢复它。任何未链接到
p.catch
的内容都会被
p
单独拒绝。既然你等待p,你就不在链条的叉上了


p
被拒绝并触发任何和所有附加的
catch
处理程序,其中可以有多个处理程序<另一方面,code>p.catch(…)会返回一个新的成功承诺。

从概念上更好地理解这一点的方法是询问您在等待什么:在第一种情况下,您等待拒绝,在另一种情况下,您等待捕获。更好地说,在另一种情况下,您等待
catch
返回的承诺…