カテゴリー
【Rxjs活用講座】publish().refCount() と share() の微妙な違い
※ 当ページには【広告/PR】を含む場合があります。
2020/07/10
2022/10/05
publish().refCount()
share()
TL;DR
publish().refCount()
Complete
share()
shareオペレーターの使い方
share
import { Observable } from 'rxjs';
import { of } from 'rxjs';
import { switchMap, share } from 'rxjs/operators';
function hot$() : Observable<any> {
console.log(`👇Hot stream is getting started.`);
return of(1).pipe(
switchMap(_ => of(new Date())
),
share() // HOTストリームで分配 + 支流は即時処理を開始
);
}
const share$ = hot$();
share$.pipe(
tap(_ => console.log('Sub stream #1 :'))
).subscribe(
res => console.log(res),
err => console.log(err),
() => console.log('Sub stream #1 is Finished!')
);
share$.pipe(
tap(_ => console.log('Sub stream #2 :'))
).subscribe(
res => console.log(res),
err => console.log(err),
() => console.log('Sub stream #2 is Finished!')
);
node
$ node dist/index.js
👇Hot stream is getting started.
Sub stream #1 :
2020-07-09T16:54:26.568Z
Sub stream #1 is Finished!
Sub stream #2 :
2020-07-09T16:54:26.575Z
Sub stream #2 is Finished!
share
Sub stream #1
Sub stream #2
share
「publish().refCount()」の使い方
publish().refCount()
import { Observable } from 'rxjs';
import { of } from 'rxjs';
import { switchMap, publish, refCount } from 'rxjs/operators';
function hot$() : Observable<any> {
console.log(`👇Hot Stream is getting started.`);
return of(1).pipe(
switchMap(_ => of(new Date())
),
publish(), // HOTストリームとして分配するだけ
refCount() // 分岐したストリームは任意のタイミングで開始
);
}
const publishRefCount$ = hot$();
publishRefCount$.pipe(
tap(_ => console.log('Sub stream #1 :'))
).subscribe(
res => console.log(res),
err => console.log(err),
() => console.log('Sub stream #1 is Finished!')
);
publishRefCount$.pipe(
tap(_ => console.log('Sub stream #2 :'))
).subscribe(
res => console.log(res),
err => console.log(err),
() => console.log('Sub stream #2 is Finished!')
);
$ node dist/index.js
👇Hot stream is getting started.
Sub stream #1 :
2020-07-09T16:54:26.578Z
Sub stream #1 is Finished!
Sub stream #2 is Finished!
share
refCount
subscribe
share
Sub stream #1
Sub stream #2
Sub stream #1
Sub stream #2
publish().refCount()
まとめ
publish().refCount()
Complete
share()
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー