天天看點

JavaScript中Promises/A+規範的實作一、Promises/A+規範說明二、簡單實作

Promises是一種異步程式設計模型,通過一組API來規範化異步操作,這樣也能夠讓異步操作的流程控制更加容易。

下面的代碼是假設執行一個異步隊列,每一項都會使用上一項傳回的資料:

這是一個回調金字塔,當異步的任務很多的時候,需要維護大量的callback。這嵌套的自己眼睛都看不清了吧。

Promise/A+規範就是為了解決上面的問題,可以用類似下面的代碼來改進,“nest”也會做些修改:

下圖是改進的圖檔示例,我在畫圖的時候也感覺到,左邊的比較難畫,右邊的很好畫。

JavaScript中Promises/A+規範的實作一、Promises/A+規範說明二、簡單實作

接下來會圍繞改進金字塔,實作規範展開。

1)一個promise可能有三種狀态:等待(pending)、已完成(fulfilled)、已拒絕(rejected)

2)一個promise的狀态隻可能從“等待”轉到“完成”态或者“拒絕”态,不能逆向轉換,同時“完成”态和“拒絕”态不能互相轉換

3)promise必須實作then方法,而且then必須傳回一個promise

4)同一個promise的then可以調用多次,并且回調的執行順序跟它們被定義時的順序一緻

5)then方法接受兩個參數,第一個參數是成功時的回調,在promise由“等待”态轉換到“完成”态時調用

6)另一個是失敗時的回調,在promise由“等待”态轉換到“拒絕”态時調用。

7)then可以接受另一個promise傳入,也接受一個“類then”的對象或方法,即thenable對象。

接下來先實作一個簡易的,隻有完成狀态,沒有拒絕和等待狀态。

JavaScript中Promises/A+規範的實作一、Promises/A+規範說明二、簡單實作

Promise對象的實作:

示範用的函數:

初始化代碼:

也可以另外一種方式調用,這樣的話内部的_resloves隊列中會有多個值

demo下載下傳:

<a href="http://download.csdn.net/detail/loneleaf1/9391315" target="_blank">http://download.csdn.net/detail/loneleaf1/9391315</a>

參考資料:

    本文轉自 咖啡機(K.F.J)   部落格園部落格,原文連結:http://www.cnblogs.com/strick/p/5092092.html,如需轉載請自行聯系原作者

繼續閱讀