1. 程式人生 > 實用技巧 >非同步處理的通用模型

非同步處理的通用模型

8-2. 非同步處理的通用模型

ES官方參考了大量的非同步場景,總結出了一套非同步的通用模型,該模型可以覆蓋幾乎所有的非同步場景,甚至是同步場景。

值得注意的是,為了相容舊系統,ES6 並不打算拋棄掉過去的做法,只是基於該模型推出一個全新的 API,使用該API,會讓非同步處理更加的簡潔優雅。

理解該 API,最重要的,是理解它的非同步模型

  1. ES6 將某一件可能發生非同步操作的事情,分為兩個階段:unsettledsettled

在這裡插入圖片描述

  • unsettled: 未決階段,表示事情還在進行前期的處理,並沒有發生通向結果的那件事
  • settled:已決階段,事情已經有了一個結果,不管這個結果是好是壞,整件事情無法逆轉

事情總是從 未決階段 逐步發展到 已決階段的。並且,未決階段擁有控制何時通向已決階段的能力。

  1. ES6將事情劃分為三種狀態: pending、resolved、rejected
  • pending: 掛起,處於未決階段,則表示這件事情還在掛起(最終的結果還沒出來)
  • resolved:已處理,已決階段的一種狀態,表示整件事情已經出現結果,並是一個可以按照正常邏輯進行下去的結果
  • rejected:已拒絕,已決階段的一種狀態,表示整件事情已經出現結果,並是一個無法按照正常邏輯進行下去的結果,通常用於表示有一個錯誤

既然未決階段有權力決定事情的走向,因此,未決階段可以決定事情最終的狀態!

我們將 把事情變為resolved狀態的過程叫做:resolve

,推向該狀態時,可能會傳遞一些資料

我們將 把事情變為rejected狀態的過程叫做:reject,推向該狀態時,同樣可能會傳遞一些資料,通常為錯誤資訊

始終記住,無論是階段,還是狀態,是不可逆的!

在這裡插入圖片描述

  1. 當事情達到已決階段後,通常需要進行後續處理,不同的已決狀態,決定了不同的後續處理。
  • resolved狀態:這是一個正常的已決狀態,後續處理表示為 thenable
  • rejected狀態:這是一個非正常的已決狀態,後續處理表示為 catchable

後續處理可能有多個,因此會形成作業佇列,這些後續處理會按照順序,當狀態到達後依次執行

在這裡插入圖片描述

  1. 整件事稱之為Promise

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZGHsvyg4-在這裡插入圖片描述

理解上面的概念,對學習Promise至關重要!