天天看點

這一次,徹底搞懂Promise的狀态轉換

這篇文章解決了我很久的困惑,也希望能夠解決看到的小夥伴的困惑,謝謝。

Promise的三種狀态到底是什麼?

  1. pending
  2. fulfilled
  3. rejected

下面我們先看下三種狀态的産生

1.pending狀态的Promise

const promise1 = new Promise((resolve,reject) => {
 
})
console.log(promise1);      
這一次,徹底搞懂Promise的狀态轉換

2. fulfilled狀态的Promise

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve()
    })
})
console.log(promise1);      
這一次,徹底搞懂Promise的狀态轉換

3. rejected狀态的Promise

const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            reject();
        })
    });
    console.log(promise);      

從pending狀态到fulfilled狀态的變化過程

  • resolve()後狀态從pending變為了fulfilled
const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('resolve前Promise的狀态:',promise);
            resolve();
            console.log('resolve後Promise的狀态:',promise);
        })
    });      
這一次,徹底搞懂Promise的狀态轉換

從pending狀态到rejected狀态的變化過程

  • reject()後狀态從pending變為了rejected
const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("Promise的狀态:reject前:",promise);
            reject();
            console.log("Promise的狀态:reject後:",promise);
        })
    });      
這一次,徹底搞懂Promise的狀态轉換

下面介紹下關于Promise狀态的可能的疑問

疑問1:resolved狀态和fulfilled狀态是一回事嗎?

答:并不是一回事,resoved狀态指的是完成了,不會再改變的狀态,隻是一種叫法,并不是真正的狀态,真正的狀态還是前文提到的那三種,pending、fulfilled、rejected這三種,是以resolved狀态可能是fulfilled也可能是rejected。

疑問2:Chrome浏覽器顯示的狀态時pending,點開卻是fulfilled,到底哪

這一次,徹底搞懂Promise的狀态轉換

參考文獻

Promise中的resolved和fulfilled到底什麼關系,又或者這隻是叫法的問題? Promise的狀态和現象【JS面試題】

繼續閱讀