Rxjs學(xué)習(xí)之stream的組件

RxJS流由幾個基本組件組成燥翅,對于整個流扒接,每個組件都有相關(guān)的特定任務(wù)和生命周期。接下來給大家一一介紹:

  • Producers
  • Consumers
  • Data pipeline
  • Time
Producers

Producers是數(shù)據(jù)的來源盖腿。流必須始終有一個數(shù)據(jù)生產(chǎn)者诫隅,它將是在RxJS中執(zhí)行的任何邏輯的起點。實際上咧最,生產(chǎn)者是由獨立生成事件的東西創(chuàng)建的(從單個值捂人、數(shù)組御雕、鼠標(biāo)單擊到從文件讀取的字節(jié)流)。觀察者模式將生產(chǎn)者定義為Subject先慷;在RxJS中饮笛,我們稱它們?yōu)?code>Observables,就像在一些可觀察的東西中一樣论熙。

Observables負責(zé)推送通知福青,因此我們將這種行為稱為fire-and-forget,這意味著我們永遠不會期望生產(chǎn)者參與事件的處理脓诡,只會參與事件的發(fā)射无午。

Consumers

與生產(chǎn)者相對應(yīng)的是,我們必須還有一個消費者來接受生產(chǎn)者的事件并以某種特定的方式處理它們祝谚。當(dāng)消費者開始偵聽生產(chǎn)者以獲取要消費的事件時宪迟,此時就生成了一個stream,并開始推送事件交惯。我們將把消費者稱為Observer次泽。
流只從生產(chǎn)者到消費者傳播,而不是相反席爽。換句話說意荤,用戶在鍵盤上鍵入時會產(chǎn)生一些事件,這些事件將被其他進程消費只锻。這就意味著理解了流就能知道如何將將應(yīng)用程序的各個部分確定為上游或下游玖像,從而確定數(shù)據(jù)將流動的方向。對于RxJS齐饮,流總是從上游的可觀察對象流到下游的觀察者捐寥,這兩個組件是松散耦合的,這增加了應(yīng)用程序的模塊性祖驱,如下圖所示握恳。

數(shù)據(jù)只會從Observable流向Observer

例如,鍵盤事件處理程序?qū)⑽挥谏嫌无嗥В驗樗簧a(chǎn)事件睡互,而不消費事件,而應(yīng)該基于按鍵執(zhí)行邏輯的代碼將位于下游陵像。在基本級別上就珠,流只需要生產(chǎn)者和消費者。一旦后者能夠開始接收來自前者的事件醒颖,您就有效地創(chuàng)建了一個流∑拊酰現(xiàn)在你能用這些數(shù)據(jù)做什么?所有這些都發(fā)生在數(shù)據(jù)管道中。

Data Pipeline

RxJS的一個優(yōu)勢是泞歉,您可以在數(shù)據(jù)從生產(chǎn)者傳遞到消費者時操作或編輯數(shù)據(jù)逼侦。這就是Rxjs方法列(observable operators)發(fā)揮作用的地方匿辩。在路由中操作數(shù)據(jù)意味著我們可以將生產(chǎn)者產(chǎn)生的數(shù)據(jù)轉(zhuǎn)化成消費者所需要的數(shù)據(jù)。這樣做會促進生產(chǎn)者和消費者的解耦(單一原則)榛丢,這對于代碼的模塊化來說是一個巨大的勝利铲球。這種設(shè)計原則在大型JavaScript應(yīng)用程序中通常很難實現(xiàn),但是RxJS簡化了這種設(shè)計模型晰赞。

Time

所有這些背后的隱含因素是Time稼病。對于RxJS,所有拿來處理stream的東西背后都有一個基本的時間概念掖鱼。時間因素滲透到我們目前討論過的所有組成部分然走。這是一個需要掌握的重要又抽象的概念,后面會詳細討論∠返玻現(xiàn)在芍瑞,只需要了解Time并不總是以正常的速度運行,可以構(gòu)建運行得更慢或更快的流褐墅,這取決于自己的需求拆檬。幸運的是,如果決定使用RxJS妥凳,這不會成為問題秩仆。下圖展示了一個RxJS流:

RxJS流
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猾封,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噪珊,老刑警劉巖晌缘,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痢站,居然都是意外死亡磷箕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門阵难,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岳枷,“玉大人,你說我怎么就攤上這事呜叫】辗保” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵朱庆,是天一觀的道長盛泡。 經(jīng)常有香客問我,道長娱颊,這世上最難降的妖魔是什么傲诵? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任凯砍,我火速辦了婚禮,結(jié)果婚禮上拴竹,老公的妹妹穿的比我還像新娘悟衩。我一直安慰自己,他們只是感情好栓拜,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布座泳。 她就那樣靜靜地躺著,像睡著了一般菱属。 火紅的嫁衣襯著肌膚如雪钳榨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天纽门,我揣著相機與錄音薛耻,去河邊找鬼。 笑死赏陵,一個胖子當(dāng)著我的面吹牛饼齿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝙搔,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼缕溉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吃型?” 一聲冷哼從身側(cè)響起证鸥,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勤晚,沒想到半個月后枉层,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赐写,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年鸟蜡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挺邀。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡揉忘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出端铛,到底是詐尸還是另有隱情泣矛,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布禾蚕,位于F島的核電站乳蓄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夕膀。R本人自食惡果不足惜虚倒,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一美侦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魂奥,春花似錦菠剩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哈蝇,卻和暖如春棺妓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炮赦。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工怜跑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吠勘。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓性芬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剧防。 傳聞我的和親對象是個殘疾皇子植锉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348