ES6-----Promise 對象

Promise實際上不是什麼新鮮的東西,他是異步編程的一種解決方案,相較於傳統的回調函數和事件來說更靈活和更節約時間,在ES6中他得到了規範化


在ES6中,Promise往小了說是一個容器,保存着不知道什麼時候會結束的事件的結果。他是一個對象,可以取得異步操作的消息

他有兩個特點:

  1. 對象的狀態不受外界影響。他代表一個異步操作,只有三種狀態,pending(進行中)、fulfilled(已成功)和失敗(reject),從外界無法改變其狀態
  2. 一旦狀態改變,就不會再改變,任何時候都會獲得這個結果,因此他的結果只有兩種,要麼成功要麼失敗,狀態會一直凝結,等待來取他的那個人

他有三個缺點:

  1. 無法取消Promise,一旦新建就會立即執行,不能取消
  2. 必須要有回調函數,不然會內部報錯
  3. 當處於pending狀態時,無法判斷此時的結果狀態

基本用法

Promise是一個構造函數,用來生成Promise實例。其參數是resolve(成功時的結果)和reject(失敗時的錯誤),這是有JS引擎提供的。

const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 異步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

實例生成後,使用then方法,分別指定兩種狀態的處理結果的回調函數

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

方法

then()

then方法是定義再原型Promise.prototype上的,其作用是狀態改變時的回調函數。在實際應用中,可以採用鏈式的then調用多個Promise對象

catch()

catch方法也是定義再原型Promise.prototype,其作用是用於指定發生錯誤時的回調函數,用於捕獲錯誤

finally()

finally方法也是定義再原型Promise.prototype,他的作用是不管最後的狀態如何,都會執行的操作,該方法在ES2018中引入,這個方法沒有任何參數,其本質是then()的特例

all()

用於多個Promise實例,包裝成一個新的Promise實例

race()

將多個 Promise 實例,包裝成一個新的 Promise 實例。

resolve()

將對象轉爲Promise對象,

reject()

返回一個新的Promise實例,該實例的狀態是rejected

 

 

 

 

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