在日常开发中,Promise我们经常会使用。但是有关Promise的异常捕获,你有没有注意到呢。
楔子
function foo() {
return new Promise((res, rej) => {
rej(`error`)
})
}
try {
foo();
}
catch (e) {
console.log(e, `发生错误了!`);
}
复制代码
上述这段代码的执行结果明显是报错,我们看看在浏览器和node中不同的报错信息。
异常将会视为‘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, `发生错误了!`);
})
复制代码
使用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()
复制代码
有关promise的异常一定要用上述两种方式捕获哦
记录记录!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END