function f2() { try { Promise.reject('出错了'); } catch(e) { console.log(e) }}执行f2(),无法通过try/catch捕获promise.reject,控制台抛出Uncaught (in promise)async function f() { try { await Promise.reject('出错了') } catch(e) { console.log(e) }}为什么改成await/async后,执行f()就能在catch中捕获到错误了,并不会抛出Uncaught (in promise)
4 回答
ITMISS
TA贡献1871条经验 获得超8个赞
这样应该就理解了吧,拒绝发生在未来。
function f2() {
try {
Promise.reject('出错了').catch(err => {
console.log('2', err)
});
console.log('1')
} catch (e) {
console.log(e)
}
}
喵喵时光机
TA贡献1846条经验 获得超7个赞
回答这个问题,原理还是探究await到底执行了什么操作?
await:表示暂停异步函数promise,等待任意表达式的执行结果。
对于f2函数,Promise.reject('出错了')异步执行,但是没有catch函数进行reject处理。
对于f函数,await Promise.reject('出错了')。相当于在后面加一个catch处理方法,方法返回传入的‘出错了’信息,所以不会报错。
添加回答
举报
0/150
提交
取消