Promise A+規範以及ES6 Promise 深刻理解

總結

針對前端開發理解 promise/A+規範與ES6 Promise之間的關係

ES6 Promise是基於 promise/A+規範的一種實現。

promise/A+規範出現的緣由與背景

1.通常狀況下,當異步請求數據時,咱們不知道請求何時會返回數據,可是在某些時候咱們須要知道數據時何時返回的,而後作一些邏輯處理。這時咱們就須要用到異步回調函數;

2. 當咱們異步回調操做中須要處理的仍是異步回調,這時候就造成了異步回調嵌套,即產生回調地獄。

爲了解決上述兩種問題,promise/A+規範產生了。

規範的內容是什麼

要求
Promise 的狀態
一個 Promise 的當前狀態必須爲如下三種狀態中的一種:等待態(Pending)、執行態(Fulfilled)和拒絕態(Rejected)。html

等待態(Pending)
處於等待態時,promise 需知足如下條件:前端

能夠遷移至執行態或拒絕態
執行態(Fulfilled)
處於執行態時,promise 需知足如下條件:promise

不能遷移至其餘任何狀態
必須擁有一個不可變的終值
拒絕態(Rejected)
處於拒絕態時,promise 需知足如下條件:異步

不能遷移至其餘任何狀態
必須擁有一個不可變的據因
這裏的不可變指的是恆等(便可用 === 判斷相等),而不是意味着更深層次的不可變(譯者注: 蓋指當 value 或 reason 不是基本值時,只要求其引用地址相等,但屬性值可被更改)。函數

Then 方法
一個 promise 必須提供一個 then 方法以訪問其當前值、終值和據因。this

promise 的 then 方法接受兩個參數:htm

1
promise.then(onFulfilled, onRejected)
參數可選
onFulfilled 和 onRejected 都是可選參數。對象

若是 onFulfilled 不是函數,其必須被忽略
若是 onRejected 不是函數,其必須被忽略
onFulfilled 特性
若是 onFulfilled 是函數:blog

當 promise 執行結束後其必須被調用,其第一個參數爲 promise 的終值
在 promise 執行結束前其不可被調用
其調用次數不可超過一次
onRejected 特性
若是 onRejected 是函數:開發

當 promise 被拒絕執行後其必須被調用,其第一個參數爲 promise 的據因
在 promise 被拒絕執行前其不可被調用
其調用次數不可超過一次
調用時機
onFulfilled 和 onRejected 只有在執行環境堆棧僅包含平臺代碼時纔可被調用 注1

調用要求
onFulfilled 和 onRejected 必須被做爲函數調用(即沒有 this 值)注2

屢次調用
then 方法能夠被同一個 promise 調用屢次

當 promise 成功執行時,全部 onFulfilled 需按照其註冊順序依次回調
當 promise 被拒絕執行時,全部的 onRejected 需按照其註冊順序依次回調
返回
then 方法必須返回一個 promise 對象 注3

1
promise2 = promise1.then(onFulfilled, onRejected);
若是 onFulfilled 或者 onRejected 返回一個值 x ,則運行下面的 Promise 解決過程:[[Resolve]](promise2, x)
若是 onFulfilled 或者 onRejected 拋出一個異常 e ,則 promise2 必須拒絕執行,並返回拒因 e
若是 onFulfilled 不是函數且 promise1 成功執行, promise2 必須成功執行並返回相同的值
若是 onRejected 不是函數且 promise1 拒絕執行, promise2 必須拒絕執行並返回相同的據因

ES6 Promise 實現

新增了 resolve,reject,all,race,finally等方法屬性

參考:

https://www.ituring.com.cn/article/66566

https://www.cnblogs.com/qq666666/p/7476292.html

相關文章
相關標籤/搜索