RxJS流由幾個基本組件組成,對于整個流,每個組件都有相關的特定任務和生命周期。接下來給大家一一介紹:
- Producers
- Consumers
- Data pipeline
- Time
Producers
Producers是數(shù)據(jù)的來源。流必須始終有一個數(shù)據(jù)生產者,它將是在RxJS中執(zhí)行的任何邏輯的起點。實際上,生產者是由獨立生成事件的東西創(chuàng)建的(從單個值、數(shù)組、鼠標單擊到從文件讀取的字節(jié)流)。觀察者模式將生產者定義為Subject;在RxJS中,我們稱它們?yōu)?code>Observables,就像在一些可觀察的東西中一樣。
Observables負責推送通知,因此我們將這種行為稱為fire-and-forget,這意味著我們永遠不會期望生產者參與事件的處理,只會參與事件的發(fā)射。
Consumers
與生產者相對應的是,我們必須還有一個消費者來接受生產者的事件并以某種特定的方式處理它們。當消費者開始偵聽生產者以獲取要消費的事件時,此時就生成了一個stream,并開始推送事件。我們將把消費者稱為Observer。
流只從生產者到消費者傳播,而不是相反。換句話說,用戶在鍵盤上鍵入時會產生一些事件,這些事件將被其他進程消費。這就意味著理解了流就能知道如何將將應用程序的各個部分確定為上游或下游,從而確定數(shù)據(jù)將流動的方向。對于RxJS,流總是從上游的可觀察對象流到下游的觀察者,這兩個組件是松散耦合的,這增加了應用程序的模塊性,如下圖所示。

例如,鍵盤事件處理程序將位于上游,因為它只生產事件,而不消費事件,而應該基于按鍵執(zhí)行邏輯的代碼將位于下游。在基本級別上,流只需要生產者和消費者。一旦后者能夠開始接收來自前者的事件,您就有效地創(chuàng)建了一個流?,F(xiàn)在你能用這些數(shù)據(jù)做什么?所有這些都發(fā)生在數(shù)據(jù)管道中。
Data Pipeline
RxJS的一個優(yōu)勢是,您可以在數(shù)據(jù)從生產者傳遞到消費者時操作或編輯數(shù)據(jù)。這就是Rxjs方法列(observable operators)發(fā)揮作用的地方。在路由中操作數(shù)據(jù)意味著我們可以將生產者產生的數(shù)據(jù)轉化成消費者所需要的數(shù)據(jù)。這樣做會促進生產者和消費者的解耦(單一原則),這對于代碼的模塊化來說是一個巨大的勝利。這種設計原則在大型JavaScript應用程序中通常很難實現(xiàn),但是RxJS簡化了這種設計模型。
Time
所有這些背后的隱含因素是Time。對于RxJS,所有拿來處理stream的東西背后都有一個基本的時間概念。時間因素滲透到我們目前討論過的所有組成部分。這是一個需要掌握的重要又抽象的概念,后面會詳細討論。現(xiàn)在,只需要了解Time并不總是以正常的速度運行,可以構建運行得更慢或更快的流,這取決于自己的需求。幸運的是,如果決定使用RxJS,這不會成為問題。下圖展示了一個RxJS流:
