Rxjs BehaviorSubjectを使ってみる  

BehaviorSubject とは



BehaviorSubject は、
Subjectとして、初期化するときに使われます。

BehaviorSubject のメソッドには、
subscribe()、getValue()、next()があります。
また、Subject のメソッドには、
next()、error()、asObservable()、complete()、unsubscribe()
などがあります。

下記のコードでは、
new BehaviorSubject(0)により、
初期化した後、
asObservable()メソッドを使用し、
Subjectを持つ、新しいObservableの、
stream$を生成します。
AngularのSecurityのテストで目にします。

ここで使用している$記号は、
変数が、複数形のストリーム(オブザーバー)の、
命名パラダイムであることを表します。
(命名規則とは微妙に違います。)

stream$.subscribe()により、
コードconsole.log(`observerA:`+x)を、
実行することになりますが、

subjectのマルチキャスト
subject.next(1);
subject.next(2);
により、2つ表示します。

Subject のメソッド、
subject.complete();
により①で終了します。

結果は初期化している値も加わり、
3つになります。




const { BehaviorSubject } =require('rxjs');
const subject = new BehaviorSubject(0);

const stream$=subject.asObservable();

stream$.subscribe(
(x) => console.log(`observerA:`+x)
);

subject.next(1);
subject.next(2);

subject.complete();
//①------------------
stream$.subscribe(
(x) => console.log(`observerB:` +x)
);

subject.next(3);

【結果】
observerA:0
observerA:1
observerA:2





上記コードの①の前にある、
subject.complete()を削除したのが、
下記コードです。

結果は、
②以降も実行されますので、
新たに、
observerB:2
observerA:3
observerB:3
が前の結果に加わります。




const { BehaviorSubject } =require('rxjs');
const subject = new BehaviorSubject(0);
const stream$=subject.asObservable();

stream$.subscribe(
(x) => console.log(`observerA:`+x)
);

subject.next(1);
subject.next(2);
//②------------------
stream$.subscribe(
(x) => console.log(`observerB:` +x)
);

subject.next(3);


【結果】
observerA:0
observerA:1
observerA:2
observerB:2
observerA:3
observerB:3