promise状态一旦设置就无法更改。即使后面手动抛出异常、重新resolve/reject,也不会影响promise的状态。
在promise没有resolve/reject的情况下手动throw/其它错误,promise状态会自动设置为rejected,传递的数据为抛出的异常。
const p1 = new Promise((reject) => {
console.log(456)
throw 2
})
console.log(2)
setTimeout(() => {
console.log(p1)
})
// 输出:456 2 Promise {<rejected> 2}
const p2 = new Promise((resolve,reject) => {
console.log(900)
resolve(8)
throw 2
})
console.log(2)
setTimeout(() => {
console.log(p2)
})
// 输出:900 2 Promise {<fulfilled> 8}
关于异常
经过实践,在resolve/reject之后执行throw ,错误并不能被node/浏览器环境捕获到,程序会正常执行。 但是,如果是其它错误可以被浏览器/node捕获。
const p1=new Promise((reject)=>{
console.log(34)
console.log(null.toString())
console.log(89)
})
console.log(2)
setTimeout(()=>{
console.log(p1)
})
发生错误之后后续代码为无效代码,所以不会输出。