Promise重要知識點
1、串聯 Promise
每次對 then() 或 catch() 的呼叫實際上建立並返回了另一個 Promise ,僅當前一個Promise 被完成或拒絕時,後一個 Promise 才會被決議。研究以下例子:
p1第一次呼叫then之後,會再次返回一個成功決議的Promise(即使p1是失敗的決議呼叫then之後也是返回成功決議的Promise)。之後每呼叫一次then,都會返回一個成功決議的Promise。
對一個Promise可以多次呼叫then進行成功或失敗的處理,而不會出現第一呼叫後就失效了。
2、錯誤捕獲
catch即可以處理reject結果還可以捕獲Promise執行器裡丟擲的錯誤。
Promise 序列鏈允許你捕獲前一個 Promise 的完成或拒絕處理函式中發生的錯誤
在此程式碼中, p1 的完成處理函式丟擲了一個錯誤,鏈式呼叫指向了第二個 Promise 上的
catch() 方法,能通過此拒絕處理函式接收前面的錯誤。若是一個拒絕處理函式丟擲了錯
誤,情況也是一樣。
為了確保能正確處理任意可能發生的錯誤,應當始終在 Promise 鏈尾部新增拒絕處理函式。
3、在 Promise 鏈中返回值
Promise 鏈的另一重要方面是能從一個 Promise 傳遞資料給下一個 Promise 的能力。傳遞給
執行器中的 resolve() 處理函式的引數,會被傳遞給對應 Promise 的完成處理函式,這點你
前面已看到過了。你可以指定完成處理函式的返回值,以便沿著一個鏈繼續傳遞資料。例
如:
p1 的完成處理函式在被執行時返回了 value + 1 。由於 value 的值為 42 (來自執行
器),此完成處理函式就返回了 43 。這個值隨後被傳遞給第二個 Promise 的完成處理函式,
並被其輸出到控制檯。
你能對拒絕處理函式做相同的事。當一個拒絕處理函式被呼叫時,它也能返回一個值。如果
這麼做,該值會被用於完成下一個 Promise 。
4、在 Promise 鏈中返回 Promise
從完成或拒絕處理函式中返回一個基本型別值,能夠在 Promise 之間傳遞資料,但若你返回
的是一個物件呢?若該物件是一個 Promise ,那麼需要採取一個額外步驟來決定如何處理。
研究以下例子:
在此程式碼中, p1 安排了一個決議 42 的作業, p1 的完成處理函式返回了一個已處於決議
態的 Promise : p2 。由於 p2 已被完成,第二個完成處理函式就被呼叫了。而若 p2 被
拒絕,會呼叫拒絕處理函式(如果存在的話),而不呼叫第二個完成處理函式。
關於此模式需認識的首要重點是第二個完成處理函式並未被新增到 p2 上,而是被新增到第
三個 Promise 。正因為此,上個例子就等價於:
若p2是一個reject結果,則p3只會被傳遞給拒絕處理函式,這與返回基本型別的值不同(基本型別的值永遠都會傳給成功處理函式)。
相關文章
- Promise知識點Promise
- promise知識點小結Promise
- Promise的10大知識點!Promise
- Promise學習筆記(知識點 + 手寫Promise)Promise筆記
- 關於Promise知識點都在這裡Promise
- ES6的Promise知識點總結Promise
- 重要,知識點:InnoDB的插入緩衝
- 面試總結:Promise有關面試的知識點。面試Promise
- 重要知識點:如何降低DNS攻擊的風險DNS
- 資料庫設計與操作的重要知識點資料庫
- 可能是全網最好的MySQL重要知識點MySql
- Vue重要知識小結Vue
- 新手注意:java開發的有哪些重要的知識點?Java
- 前端知識科普:HTML5中重要的6個點!前端HTML
- 《MySQL重要知識點及面試總結》:推薦收藏MySql面試
- 【MySQL速通篇001】5000字吃透MySQL部分重要知識點MySql
- web前端的開發規範比較重要的知識點Web前端
- 知識點
- 資料庫基礎重要知識資料庫
- rabbitmq 知識點MQ
- SQL知識點(+)SQL
- 前端知識點前端
- Android 知識點Android
- Weex 知識點
- Laravel 知識點Laravel
- MySQL知識點MySql
- 知識點——terms
- ajax知識點
- 通用知識點
- 混合知識點
- Redis知識點Redis
- JavaWeb知識點JavaWeb
- JS知識點:ES6 中常見的知識點JS
- js資料型別重要知識整理JS資料型別
- 企業知識管理的重要性
- 計算機基礎知識很重要計算機
- 浮點數小知識點
- 面試題總結:可能是全網最好的MySQL重要知識點面試題MySql