ㄟ小姐~我這東西很急,先幫我處理一下
此時排在後方的人,不來個白眼伺候就對不起自己啦!
當然,有Guts的行員就會大聲說~ 麻煩從最後一個排隊喔!謝謝
!
沒錯,今天我們要介紹的concatAll
就是有這樣的Guts,凡事照步來,沒跟你攀關係、走後門的,趕緊來認識一下它吧!
concatAll
就是一個一步一腳印的人,過程中不管有接收到多少個observables
,他會先把手邊已訂閱的observable
先執行完(注意!是執行完,執行不完就準備大塞車了!XD),之後才會接手下一個訂閱。interval數: 0->->1->2
的例子,修改為concatAll
來看看!import { fromEvent, map, concatAll, interval, take, tap } from 'rxjs';
// case1:=== switchAll ===
console.log('=== case1: concatAll ===');
const timer$ = interval(1000).pipe(take(3));
fromEvent(document, 'click')
.pipe(
tap(() => console.log('click!')),
map(() => timer$),
concatAll() //<--
)
.subscribe(console.log);
observable
,concatAll
就是先把手邊的訂閱完成,才接手下一個,很實在,正所謂 ~ 吃多嚼不爛,正是它秉持的道理吧!import { fromEvent, concatMap, interval, take, tap } from 'rxjs';
// === case2: concatMap ===
console.log('=== case2: concatMap ===');
const timer$ = interval(1000).pipe(take(3));
fromEvent(document, 'click')
.pipe(
tap(() => console.log('click!')),
concatMap(() => timer$) //<-- concatMap = concatAll + map
)
.subscribe(console.log);
concatAll
:observable
直到結束後,才處理下一個observable
的訂閱。observable
尚未結束時,接收到的observable
都會被放在queue
之中,慢慢處理。concatAll
等同於mergeAll(1)
mergeAll(N)
,括號內的變數N
就是告訴mergeAll
你再同一時間最多處理多少個observable
,有趣吧!
concatAll
、switchAll
及mergeAll
,一開始真的抓不著頭緒,多虧了J.H.Blog
大大的文章,讓我秒懂觀念,在此幫他的好文推一下:28天
,剩下最後兩天了,繼續攀向高峰!