Promise无法捕获异常错误解决方案

915 阅读1分钟

介绍

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)
        })

好了,今天的分享对你有帮助,记住收藏关注哦!