关于Promise的错误捕获,看这一篇就够辣。

2,538 阅读1分钟

在日常开发中,Promise我们经常会使用。但是有关Promise的异常捕获,你有没有注意到呢。

楔子

function foo() {
    return new Promise((res, rej) => {
        rej(`error`)
    })
}

try {
    foo();
}
catch (e) {
    console.log(e, `发生错误了!`);
}

上述这段代码的执行结果明显是报错,我们看看在浏览器和node中不同的报错信息。

image.png

image.png
异常将会视为‘Uncaught(in promise)’被抛到全局中去。
在Nodejs中,可以通过process.on('unhandledRejection',e=>{...})来捕获全局错误。
但在浏览器中,没有有效的方式捕获此类全局异常。
所以我们应该尽可能避免promise的错误被抛入全局环境。

使用catch方法

function foo() {
    return new Promise((res, rej) => {
        rej(`error`)
    })
}

foo().catch(e => {
    console.log(e, `发生错误了!`);
})

image.png

使用async/await和try/catch

function foo() {
    return new Promise((res, rej) => {
        rej(`error`)
    })
}

async function test() {
    try {
        await foo()
    }
    catch (e) {
        console.log(e, `发生错误了!`);
    }
}

test()

image.png


有关promise的异常一定要用上述两种方式捕获哦


记录记录!