web-dev-qa-db-ja.com

ObservableをReplaySubjectに変換する方法は?

これがObservableReplaySubjectに変換するために今行っていることです。

const subject = new Rx.ReplaySubject(1);

observable.subscribe(e => subject.next(e));

これは変換を行うための最良の方法ですか、それとももっと慣用的な方法がありますか?

15
Misha Moroshko

サブジェクトはすでにオブザーバーのように動作するため、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をすでにサブスクライブしているので、それを「コールド」から「ホット」に変更しました(おそらくユースケースでは問題ではありません)。

17
martin