rxjs Observable 設計原理背後的 Pull 和 Push 思路
阿新 • • 發佈:2022-05-24
Observables 顧名思義,是可以被觀察的事務。在 Rxjs 的上下文裡,Observable 會隨著時間的推移,在某個時間點產生資料。
Observables 可以:
- 不停地(永遠)產生值,比如 interval 操作符。
- 可以一次性生產價值,然後進入 complete 狀態。
- 可能會產生錯誤,然後進入 complete 狀態。
Observable 是一種非同步事件的實現利器,例如單個操作(HTTP 請求)或多個可重複的操作(例如游標移動或按鍵)。
響應式程式設計(Reactive Programming)是一種構建應用程式的方法,它對應用程式內發生的變化做出響應,而不是編寫應用程式來處理這些變化。後者是 Imperative Programming 即指令式程式設計的典型特徵。
要理解 Observable 的設計原理,我們首先有必要了解典型的生產者和消費者通訊的幾種模式。
拉取(Pull)和推送(Push)模型定義了資料生產者如何與資料消費者合作。
Pull
拉取:在拉取模型的情況下,消費者決定何時使用或請求資料。 當我們建立一個返回值的函式時,該函式就是生產者。 但是,在呼叫該函式(或要求提供資料)之前,該函式不會產生任何內容。
呼叫函式的程式碼是消費者。 此呼叫按照消費者的需求被觸發。 消費者決定傳播策略。
Push
推送:生產者主導推模型。 任何使用資料的人都不知道資料何時到達。 他們知道資料到達時要做的應用邏輯,但消費者不決定資料何時到達。
Promise 是推送模型的經典示例。 當任務完成時,promise 會產生資料或錯誤。 傳遞給 Promise 的回撥函式永遠不會知道 Promise 何時完成,它只負責資料成功達到或者發生錯誤時,應該執行什麼樣的邏輯。