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