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