const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
throw new Error();
}, 2000);
});
const p2 = p1
.then((val) => {
console.log(val);
return val + 1;
})
.catch((err) => {
console.log(err);
return err;
});
Promise.all([p2, Promise.reject(3)])
.then((val2) => {
console.log(val2);
})
.catch((err2) => {
console.log(err2);
});
//3
// Uncaught Error
// 1
解析:1、setTimeout是宏任务,后执行,直接看Promise.all
2、promise.all中,第二个直接执行reject,结束,走最后一个catch,输出3
3、resolve(1)执行,内部执行异步微任务,所以抛出错误后,同步代码停止,异步继续执行,最后输出1