Promise状态

139 阅读1分钟

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)
})

image.png 发生错误之后后续代码为无效代码,所以不会输出。