1. 程式人生 > 實用技巧 >ES6 - Promise

ES6 - Promise

​ 在MDN文件中,Promise是一個物件,代表一個非同步操作的最終完成或者失敗。在網上大多ES6教程中,認為Promise是非同步程式設計的一種解決方案,從語法上說是一個物件,從它可以獲取非同步操作的訊息。

  

  瞭解promise的工作方式文件https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises

內容提要:

  • 原理:本質上Promise是一個函式返回的物件,我們可以在它上面繫結回撥函式,這樣我們就不需要在一開始把回撥函式作為引數傳入這個函數了。
  • 拒絕事件:當 Promise 被拒絕時,會有已定義的兩個事件(
    rejectionhandled
    ,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方法
  • 應用