Javascript Promise 學習筆記

1.     定義:Promise是抽象異步處理對象以及對其進行各類操做的組件,它把異步處理對象異步處理規則採用統一的接口進行規範化。ajax

 

2.     ES6 Promises 標準中定義的API數組

a)  Constructor:採用new來實例化,
var promise = new Promise(function(resolve, reject) {…});promise

b)  Instance Method:使用then方法設置成功(resolve)失敗(reject)時的回調函數,      異步

       promise.then(onFulfilled, onRejected)ide

promise.catch(onRejected)其中,catch只是then的別名而已;函數

c)  Static Method:一些其餘的輔助方法,好比all()resolve()spa

 

3.     Promise 狀態。三種狀態:Pending(初始化)FulfilledRejected。在then後執行的函數能夠確定地說只會被調用一次。3d

promise對象被 resolve 時的處理 onFulfilledorm

promise對象被 reject 時的處理 onRejected 對象

image

1. Promise調用的執行過程

 

4.     Resolve方法:

a)  靜態方法Promise.resolve(value)能夠認爲是new Promise()方法的快捷方式,是一種語法糖;Promise.reject(error)與之相似;

b)  Promise.resolve方法另外一個做用就是將thenable對象轉換爲promise對象,好比jQuery.ajax()

 

5.     Promise在規範上規定Promise只能使用異步調用方式 。因此,promise.then其實是屬於異步調用的。

 

6.     Promise方法鏈Promise能夠將任意個方法連在一塊兒做爲一個方法鏈(method chain)。例如:

.then(taskA).then(taskB).catch(onRejected).then(finalTask);

方法鏈將方法串在一塊兒,按照順序嚴格執行。

* 注意,ECMAScript 3catch是保留字,所以在IE8一下不能使用,因此,通常使用promise["catch"]或者then來代替之。

imageimage

2. Promise鏈式調用的執行過程

 

7.     每次調用then都會返回一個新建立的promise對象,應該儘可能避免一個promise執行多個then方法,而是使用鏈式調用法。

 

8.    Promise和數組:Promise.all([…])在全部promise對象都變爲 FulFilled Rejected 狀態以後被調用。Promise對象數組中全部promise方法同時調用。

Promise.race爲任意一個方法變爲 FulFilled Rejected 狀態以後被調用,在第一個promise對象變爲Fulfilled以後,並不會取消其餘promise對象的執行。

 

9.     Promise中的    then catch

a)  使用promise.then(onFulfilled, onRejected) 的話,在 onFulfilled 中發生異常的話,在 onRejected 中是捕獲不到這個異常的。

b)  promise.then(onFulfilled).catch(onRejected) 的狀況下,then 中產生的異常能在 .catch 中捕獲

c)  .then .catch 在本質上是沒有區別的,須要分場合使用。

 

10.   Deferred擁有 PromiseDeferredPromise並非處於競爭的關係,而是Deferred內涵了Promise。使用Deferred,只須要先建立deferred對象,能夠在任什麼時候機對 resolvereject 方法進行調用。
    var deferred = new Deferred();

 

本文摘自JavaScript Promise迷你書(中文版)

相關文章
相關標籤/搜索