Yev*_*lov 35 javascript catch-block promise es6-promise
reject()调用promise 回调后,Chrome控制台中会显示警告消息"Uncaught(in promise)".我不能围绕它背后的原因,也不知道如何摆脱它.
var p = new Promise((resolve, reject) => {
setTimeout(() => {
var isItFulfilled = false
isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
}, 1000)
})
p.then(result => console.log(result))
p.catch(error => console.log(error))
Run Code Online (Sandbox Code Playgroud)
警告:

编辑:
我发现如果onRejected没有向.then(onResolved, onRejected)方法显式提供处理程序,JS将自动提供隐式处理程序.它看起来像这样:(err) => throw err.自动生成的处理程序将依次抛出.
参考:
如果IsCallable(onRejected)`为false,那么
让onRejected为" Thrower ".
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen
tri*_*cot 33
发生这种情况是因为您没有将catch处理程序附加到第一个then方法返回的promise ,因此在promise拒绝时没有处理程序.你在最后一行中确实有一个承诺p,但是没有因为方法返回的链式承诺then在它之前的行中.
正如您在下面的注释中正确添加的那样,当未提供catch处理程序(或者它不是函数)时,默认值将抛出错误.在一个promise链中,这个错误可以通过catch方法回调来捕获,但是如果没有,JavaScript引擎将像处理任何其他未捕获的错误一样处理错误,并在这种情况下应用默认处理程序,这会导致您在控制台中看到的输出.
为了避免这种情况,将.catch方法链接到第一个返回的promise then,如下所示:
p.then( result => console.log('Fulfilled'))
.catch( error => console.log(error) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23559 次 |
| 最近记录: |