71. Observable Subjectを実装する

JavaScript

少し工夫が必要  - accepted / - tried

この問題は 57. Observableを作るの続きです。

Observableはunicast、つまり各subscriptionお互いに干渉しない。multicastを実現するため、Subjectを使うと良い。

ええと、コードで説明した方がわかりやすいかも

// 以下はデフォルトの挙動const observable = from([1,2,3])observable.subscribe(console.log)observable.subscribe(console.log)// 1// 2// 3// 1// 2// 3

ログから見るとわかる。二つのサブスクリプションは独立なので、ログも分かれている。

Subjectを使えば、DOMのイベントシステムに近づいてくる。

const subject = new Subject()subject.subscribe(console.log)subject.subscribe(console.log) const observable = from([1, 2, 3])observable.subscribe(subject)// 1// 1// 2// 2// 3// 3

ログが変わった!Subjectはまずobserverとして働き、valueを取得してからObservableとして働き、valueを複数のobserverに渡している。

面白くない?では、基本なSubject Classを実装してください。

  1. Observableはすでに実装済みで、そのまま使える。
  2. new Observer({next,error,complete}) または new Observer(function)で新規Observerを作れる。

常にもっといい方法を求めよう。