Promise的状态改变的特点

58 阅读1分钟

Promise 相关问题

Promise中状态改变的问题

  • Promise中状态一旦改变之后,就已经锁定,不会再发生变化

MDN中对此的解释为

使用已解决(resolved)这个术语来描述 Promise——这意味着该 Promise 已经敲定(settled),或为了匹配另一个 Promise 的最终状态而被“锁定(lock-in)”,进一步解决或拒绝它都没有影响。原始 Promise 提案中的 States and fates 文档包含了更多关于 Promise 术语的细节。在口语中,“已解决”的 Promise 通常等价于“已兑现”的 Promise,但是正如“States and fates”所示,已解决的 Promise 也可以是待定或拒绝的。

  • 我自己的理解是相当于在第一次状态改变之后,和return操作不太一样,后续代码仍然会执行,但是这个Promise的状态不会再发生变化,以第一次为准,之后以这次状态执行后续处理步骤

// 0
// 0
// 0
// 3
// 4
// 成功
function test(){
    return new Promise((resolve,reject)=>{
        [0,0,0].forEach((item)=>{
            console.log(item)
            resolve()
        })
        console.log(3)
        reject()
        console.log(4)
    })
}

// 5
// 失败
// 进settimeout
function test2(){
    return new Promise((resolve,reject)=>{

        setTimeout(function() {
            console.log("进settimeout")
            resolve()
        }, 10);
        reject()
        console.log(5)
    })
}

// 4
// 失败
// 0
// 0
// 0
// 3
function test3(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            [0,0,0].forEach((item)=>{
            console.log(item)
            resolve()
        })
        console.log(3)
        },0)
        
        reject()
        console.log(4)
    })
}

function testFunction(){
test3().then(()=>{
    console.log("成功")
}).catch(()=>{
    console.log('失败')
})
}
testFunction()