ES6 - Promise
阿新 • • 發佈:2020-08-19
在MDN文件中,Promise是一個物件,代表一個非同步操作的最終完成或者失敗。在網上大多ES6教程中,認為Promise
是非同步程式設計的一種解決方案,從語法上說是一個物件,從它可以獲取非同步操作的訊息。
瞭解promise的工作方式文件:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises
內容提要:
- 原理:本質上Promise是一個函式返回的物件,我們可以在它上面繫結回撥函式,這樣我們就不需要在一開始把回撥函式作為引數傳入這個函數了。
- 拒絕事件:當 Promise 被拒絕時,會有已定義的兩個事件(
)之一被派發到全域性作用域unhandledrejection
- 鏈式呼叫:連續執行兩個或者多個非同步操作
- 組合:
Promise.all()
和Promise.race()
是並行執行非同步操作的兩個組合式工具。 - 時序:為了避免意外,即使是一個已經變成 resolve 狀態的 Promise,傳遞給
then()
的函式也總是會被非同步呼叫 - 巢狀:簡便的 Promise 鏈式程式設計最好保持扁平化
- 常見錯誤
Promise建構函式以及此類物件的方法和屬性:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
內容提要:
- Promise Constructor:建構函式主要是用於包裝還未支援promises的函式
- Promise的三種狀態:pending, fulfilled, rejected
- 方法
- Promise原型
- 建立Promise
阮一峰的ES6教程:https://es6.ruanyifeng.com/#docs/promise
內容提要:
- Promise的含義
- 基本用法:程式碼舉例
- then方法
- catch方法
- Promise 物件的錯誤具有“冒泡”性質
reject()
方法的作用,等同於丟擲錯誤- 一般來說,不要在
then()
方法裡面定義 Reject 狀態的回撥函式(即then
catch
方法 - 如果沒有使用
catch()
方法指定錯誤處理的回撥函式,Promise 物件丟擲的錯誤不會傳遞到外層程式碼,即不會有任何反應
- finally方法:用於指定不管 Promise 物件最後狀態如何,都會執行的操作
- all方法:用於將多個 Promise 例項,包裝成一個新的 Promise 例項
- race方法:將多個 Promise 例項,包裝成一個新的 Promise 例項
allSettled方法:
方法接受一組 Promise 例項作為引數,包裝成一個新的 Promise 例項。只有等到所有這些引數例項都返回結果,不管是fulfilled
還是rejected
,包裝例項才會結束。- any方法:只要引數例項有一個變成
fulfilled
狀態,包裝例項就會變成fulfilled
狀態;如果所有引數例項都變成rejected
狀態,包裝例項就會變成rejected
狀態 - resolve方法
- reject方法
- 應用