Promise 捕获不了异步异常吗?

查看 82|回复 4
作者:Vrds   
问题 1:异步异常在 Promise 回调里面.
// 异步异常
new Promise((resolve, reject) => {
    setTimeout(() => {
        throw "err";
    }, 0);
})
.then((value) => {
        console.log(value);
})
.catch((reason) => {
        console.log(reason);
});
// 控制台抛出错误
// 同步异常
new Promise((resolve, reject) => {
        throw "err";
})
.then((value) => {
        console.log(value);
})
.catch((reason) => {
        console.log(reason);
});
// output: err
// 同步异常 Promise 的状态
const p = new Promise((resolve, reject) => {
        throw "err";
})
// output: rejected
// 异步异常 Promise 的状态
const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            throw "err";
    });
})
// output: pending
问题 2:异步异常在 then/catch 回调里面.
// 异步异常
Promise.resolve().then(()=>{
    setTimeout(()=>{   
        throw 'err'
    },0)
}).catch((err)=>{
    err   
}).then((value)=>{
    console.log(value)
})
// 输出:
// undefined
// x Uncaught err
// 同步异常
Promise.resolve().then(()=>{
   throw 'err'
}).catch((err)=>{
    console.log(err)
}).then((value)=>{
    console.log(value)
})
// 输出:
// err           
// undefined     

err, promise, value, console

Vrds
OP
  
小白求解答!
readonly   
是的,里面的异步异常需要手动调用 reject 实现
Vrds
OP
  
@readonly 好的,谢谢!
ysc3839   
async function 才能捕获异步异常
您需要登录后才可以回帖 登录 | 立即注册

返回顶部