合并操作符

forkJoin

1.特點:在每個被合并的流都發(fā)出complete信號時锚烦,發(fā)射一次也是唯一一次數(shù)據(jù)拆魏;

const ob1 = Rx.Observable.interval(1000).map(d => `ob1:$qqcsscc`).take(3);
const ob2 = Rx.Observable.interval(2000).map(d => `ob2:$8oyq0su`).take(2);
Rx.Observable.forkJoin(ob1, ob2).subscribe((data) => console.log(data));
// ["ob1:2", "ob2:1"]:ob1在發(fā)射完第三個數(shù)據(jù)時發(fā)出complete信號鹏倘,ob2在發(fā)射完第二個數(shù)據(jù)時發(fā)射出complete信號,forkJoin等ob1和ob2都結(jié)束時發(fā)射一次數(shù)據(jù)绰寞;

2.適用場景:有一組流,當(dāng)你只關(guān)心每個流的最終發(fā)射值铣口,即這種序列只有一次發(fā)射 — 類似 Promise.all()
(1)對于一個發(fā)出多個值的流滤钱,除了最后發(fā)出的一個值之外,其他的值都會忽略脑题;
(2)當(dāng)所有內(nèi)部流完成時件缸,生成的流只發(fā)出一次 — 如果任何內(nèi)部流沒有完成,它將永遠(yuǎn)不會完成叔遂,如果任何內(nèi)部流出錯他炊,它將拋出一個錯誤争剿;

zip

1.特點:當(dāng)每個被合并的流都發(fā)射了新數(shù)據(jù),zip將其合并為數(shù)組發(fā)射出去佑稠,直到其中某個流發(fā)出complete信號秒梅,整個被合并的流結(jié)束不再發(fā)射數(shù)據(jù);

const ob1 = Rx.Observable.interval(1000).map(d => `ob1:$qwwowcm`).take(3);
const ob2 = Rx.Observable.interval(2000).map(d => `ob2:$em60soc`).take(2);
Rx.Observable.zip(ob1, ob2).subscribe({
  next: (data) => console.log(data),
  complete: () => console.log('complete')
});
// ["ob1:0", "ob2:0"] ob1等待ob2發(fā)射數(shù)據(jù)舌胶,之后合并
// ["ob1:1", "ob2:1"] 此時ob2結(jié)束捆蜀,整個合并的流也結(jié)束
// "complete"

2.適用場景:有一組流,當(dāng)你關(guān)心這一組流的最新發(fā)射值集合幔嫂,即它等待從所有輸入流中發(fā)出相應(yīng)的值辆它,然后將它們轉(zhuǎn)換成單個值數(shù)組并發(fā)出結(jié)果;
(1)只有當(dāng)每個源序列中有一對新值時履恩,它才會發(fā)布锰茉,因此如果其中一個源序列發(fā)布值的速度快于另一個序列,發(fā)布速率將由兩個序列中較慢的一個決定切心;
(2)當(dāng)任何內(nèi)部流完成并且相應(yīng)的匹配對從其他流發(fā)出時飒筑,結(jié)果流完成。如果任何內(nèi)部流沒有完成绽昏,它將永遠(yuǎn)不會完成协屡,如果任何內(nèi)部流出錯,它將拋出一個錯誤全谤;

combineLatest

1.特點:第一次等待被合并的流發(fā)出新數(shù)據(jù)肤晓,但在合并時,若其中有流在等待其他流發(fā)射數(shù)據(jù)期間又發(fā)射了新數(shù)據(jù)认然,則使用該流的新數(shù)據(jù)進行合并补憾,之后只要某個流發(fā)射新數(shù)據(jù),不再等待其他流同步發(fā)出數(shù)據(jù)卷员,而是使用其他流的最近一次數(shù)據(jù)進行合并盈匾,直至所有數(shù)據(jù)發(fā)出complete信號

const ob1 = Rx.Observable.interval(1000).map(d => `ob1:$66eua6q`).take(3);
const ob2 = Rx.Observable.interval(2000).map(d => `ob2:$8wucsum`).take(2);
Rx.Observable.combineLatest(ob1, ob2).subscribe({
  next: (data) => console.log(data),
  complete: () => console.log('complete')
});
// ["ob1:1", "ob2:0"] ob1等待ob2發(fā)射毕骡,當(dāng)ob2發(fā)射時ob1已經(jīng)發(fā)射了第二次數(shù)據(jù)削饵,使用ob1的第二次數(shù)據(jù)
// ["ob1:2", "ob2:0"] ob1繼續(xù)發(fā)射第三次也是最后一次數(shù)據(jù),ob2雖然還未發(fā)射挺峡,但是可以使用它上一次的數(shù)據(jù)
// ["ob1:2", "ob2:1"] ob2發(fā)射第二次也是最后一次數(shù)據(jù)葵孤,使ob1上一次的數(shù)據(jù)。
// "complete"

2.適用場景:有一組流橱赠,當(dāng)你關(guān)心這一組流的任一一個流的最新發(fā)射值尤仍,即需要在部分狀態(tài)發(fā)生變化時保持最新;
(1)RxJs緩存每個輸入序列的最后一個值狭姨,一旦所有序列產(chǎn)生了至少一個值宰啦,它就使用從緩存中獲取各個流當(dāng)前的最新值來計算結(jié)果值苏遥,然后通過結(jié)果流發(fā)出該計算的輸出;
(2)如果某個輸入流不發(fā)出任何值并且永遠(yuǎn)不會完成赡模,combineLatest也永遠(yuǎn)不會發(fā)出并且永遠(yuǎn)不會完成田炭,因為它將再次等待所有流中某個流發(fā)出某個值;

【總結(jié)】:forkJoin僅會合并各個子流最后發(fā)射的一次數(shù)據(jù)漓柑,觸發(fā)一次回調(diào)教硫;zip是只要被合并的流均發(fā)射了新數(shù)據(jù)則將其合并發(fā)射,之后繼續(xù)等待至某個流結(jié)束辆布;combineLatest是只要被合并的流有一個發(fā)射新數(shù)據(jù)則將發(fā)射合并數(shù)據(jù)瞬矩,直至所有流結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锋玲,一起剝皮案震驚了整個濱河市景用,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惭蹂,老刑警劉巖伞插,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盾碗,居然都是意外死亡媚污,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門置尔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杠步,“玉大人氢伟,你說我怎么就攤上這事榜轿。” “怎么了朵锣?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵谬盐,是天一觀的道長。 經(jīng)常有香客問我诚些,道長飞傀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任诬烹,我火速辦了婚禮砸烦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绞吁。我一直安慰自己幢痘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布家破。 她就那樣靜靜地躺著颜说,像睡著了一般购岗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上门粪,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天喊积,我揣著相機與錄音,去河邊找鬼玄妈。 笑死乾吻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拟蜻。 我是一名探鬼主播溶弟,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞭郑!你這毒婦竟也來了辜御?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤屈张,失蹤者是張志新(化名)和其女友劉穎擒权,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阁谆,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碳抄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了场绿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剖效。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焰盗,靈堂內(nèi)的尸體忽然破棺而出璧尸,到底是詐尸還是另有隱情,我是刑警寧澤熬拒,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布爷光,位于F島的核電站,受9級特大地震影響澎粟,放射性物質(zhì)發(fā)生泄漏蛀序。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一活烙、第九天 我趴在偏房一處隱蔽的房頂上張望徐裸。 院中可真熱鬧,春花似錦啸盏、人聲如沸重贺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檬姥。三九已至曾我,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間健民,已是汗流浹背抒巢。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秉犹,地道東北人蛉谜。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像崇堵,于是被迫代替她去往敵國和親型诚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容