これがObservable
をReplaySubject
に変換するために今行っていることです。
const subject = new Rx.ReplaySubject(1);
observable.subscribe(e => subject.next(e));
これは変換を行うための最良の方法ですか、それとももっと慣用的な方法がありますか?
サブジェクトはすでにオブザーバーのように動作するため、3種類の通知すべてを渡したい場合は、observable.subscribe(subject)
だけを使用できます。例えば:
let subject = new ReplaySubject();
subject.subscribe(
val => console.log(val),
undefined,
() => console.log('completed')
);
Observable
.interval(500)
.take(5)
.subscribe(subject);
setTimeout(() => {
subject.next('Hello');
}, 1000)
ライブデモをご覧ください: https://jsbin.com/bayewo/2/edit?js,console
ただし、これには1つの重要な結果があります。ソースのObservableをすでにサブスクライブしているので、それを「コールド」から「ホット」に変更しました(おそらくユースケースでは問題ではありません)。