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 方法
- 構造實例
- 構造函數接受一個函數作爲參數
- 調用構造函數得到實例p的同時,作爲參數的函數會立即執行
- 參數函數接受兩個回調函數參數resolve和reject
- 在參數函數執行的過程中,在內部調用resolve,會將p的狀態編程fulfilled,或者調用reject,將p的狀態變成rejected
- 調用 .then
- 調用 .then可以爲實例p註冊兩種狀態回調函數
- 當實例p的狀態爲fulfilled,會觸發第一個函數執行
- rejected,第二個函數
總結
上面這樣構造promise實例,然後調用 .then.then.then的編寫方式,就是promise
基本模式
- 異步過程轉化成promise
- 三種狀態
- .then 註冊狀態的回調
- 已完成的狀態能觸發回調
如何使用
promise實例是那種狀態:
- pending(待定)
- fulfilled(已執行)
- 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