認識、掌握、並使用JavaScript Promise

Promise 是什麼?

Promise說的簡單通俗一點就是一種寫代碼的方式,並且是用來寫JavaScript編程中的異步代碼的

基本用法

let p = new Promise((resolve,reject)=>{
    // do something
    //滿足某些條件執行resolve  or  reject
    if(條件){
        resolve()
    }else{
        reject()
    }
})

p.then(()=>{
    // 如果p 的狀態被resolve了,就進入這裏
},()=>{
    // reject
}

第一段是調用了Promise構造函數

第二段是調用了Promise實例的 .then 方法

  1. 構造實例
    1. 構造函數接受一個函數作爲參數
    2. 調用構造函數得到實例p的同時,作爲參數的函數會立即執行
    3. 參數函數接受兩個回調函數參數resolve和reject
    4. 在參數函數執行的過程中,在內部調用resolve,會將p的狀態編程fulfilled,或者調用reject,將p的狀態變成rejected
  2. 調用 .then
    1. 調用 .then可以爲實例p註冊兩種狀態回調函數
    2. 當實例p的狀態爲fulfilled,會觸發第一個函數執行
    3. rejected,第二個函數

總結

上面這樣構造promise實例,然後調用 .then.then.then的編寫方式,就是promise

基本模式

  • 異步過程轉化成promise
  • 三種狀態
  • .then 註冊狀態的回調
  • 已完成的狀態能觸發回調

如何使用

promise實例是那種狀態:

  1. pending(待定)
  2. fulfilled(已執行)
  3. rejected(已拒絕)

fulfilled和reject  可以說成 : 已成功 和 已失敗,這兩種狀態也稱爲已完成狀態

resolve和reject

調用resolve和reject能分別將promise實例的狀態變成fulfilled和rejected,

只有狀態變成已完成(fulfilled 和  rejected 之一)才能觸發狀態的回調

Promise API

promise 的內容分爲構造函數、實例方法和靜態方法

  • 一個構造函數:new Promise
  • 兩個實例方法:.then 和 .catch
  • 四個靜態方法:Promise.all、Promise.race(不常用)、Promise.resolve、Promise.reject
  • new Promise  能將一個異步過程轉換成promise對象。先有了promise對象,然後纔有promise編程方式。
  • .then用於爲promise對象的狀態註冊回調函數。它會返回一個promise對象,所以可以進行鏈式調用,也就是 .then後面可以繼續 .then , 在註冊的狀態回調函數中,可以通過return語句改變 .then 返回的promise對象的狀態,以及向後面.then註冊的狀態回調傳遞數據;也可以不適用return語句,那樣默認就是將安撫你會的promise對象resolve
  •  .catch 用於註冊reject狀態的回調函數,同時該回調也是程序出錯的回調,既如果前面的程序運行過程中出錯,也會進入執行該回調函數。同 .then 一樣,也會返回新的promise對象。
  • 調用Promise.resolve 會返回一個狀態爲fulfilled 狀態的promise對象,參數會作爲數據傳遞給後面的狀態回調函數
  • Promise.reject與Promise.resolve同理,區別在於返回的promise對象狀態爲rejectd

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章