介绍
promise当中,无法捕获到异步代码里面的错误
事例
把throw new Error语句放延时函数里,只会报错,不执行reject函数或者catch函数
var promise = new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error('nono') //这里主动抛出错误
}, 500);
})
.then(()=>{},(err)=>{
console.log(1) //这里是reject时应该调用的函数,但是这里并没有执行,只会在控制台报错
console.log(err) //根本不执行这里
})
.catch((err)=>{
console.log(2) //这里catch都不执行
console.log(err)
})
而我不把throw new Error语句放延时函数里,就能在reject函数里执行
var promise = new Promise((resolve, reject) => {
throw new Error('nono') //这里直接抛出错误,就能被后面的reject函数执行到
})
.then(()=>{},(err)=>{
console.log(1) //这里就执行了
console.log(err)
})
.catch((err)=>{
console.log(2)
console.log(err)
})
解决异步错误怎么办呢?答案是try catch
setTimeout(() => {
try {
throw new Error('出错了')
} catch (e) {
console.log(e)//代码执行的时候,这里就能捕获到上面抛出的异常错误了
}
}, 400)
})
p3.then(null, err => {
console.log(err)
})
好了,今天的分享对你有帮助,记住收藏关注哦!