new Promise(
(r)=>{
r("aaa")
a
console.log("resolve后的报错,怎么捕获")
}
)
如上,a这个变量未定义,发现没捕获到
请问下,这种情况下,该怎么处理呢
new Promise(
(r)=>{
r("aaa")
a
console.log("resolve后的报错,怎么捕获")
}
)
如上,a这个变量未定义,发现没捕获到
请问下,这种情况下,该怎么处理呢
你是调用resolve修改的promise状态,如果是resolve之后的报错,是没有办法捕获的,promise内部已经try catch捕获了,所以不会抛出来。
你可以加个setTimeout(fn, 0)来resolve的状态修改改为异步执行,try catch 无法捕获异步的异常,就会抛出来。
Promise((resolve, reject) => {
setTimeout(function() {
resolve(123);
a;
console.log("这样就可以捕获到promise异常了")
}, 0)
})
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
一般来说,Promise中的resolve之后不应该再书写代码,但是如果写了的话还是会执行的。比如
上面代码中,调用
resolve(1)
以后,后面的console.log(2)
还是会执行,并且会首先打印出来。这是因为立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务。但是这种写法不是很好的语法规范,并且对于Promise,在resolve和reject之后的使命也就已经完成,后续的处理应该放在then和catch中处理,所以我们一般这样写