71. 实现 Observable Subject

JavaScript

中等难度  -通过 / -执行

本问题是 57. 实现Observable的续集。

Observables 是unicast的,意味着每一个subscription都是相互独立的。为了创造multicast,你需要使用Subject

嗯,用代码来解释可能更简单

// 以下是默认行为const observable = from([1,2,3])observable.subscribe(console.log)observable.subscribe(console.log)// 1// 2// 3// 1// 2// 3

你可以从log上看出来两个订阅是相互独立的,所以log也是分开的。

如果用了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

可以看到log不一样了!因为Subject首先按照observer工作,获取值,然后像一个Observable工作,把value 传递给多个不同的observer。

很酷对吧?好了,请实现一个简单的Subject Class

  1. Observable实现成的,你可以直接使用
  2. 你可以用 new Observer({next,error,complete}) 或者 new Observer(function)来创建一个新的Observer。

始终思考更好的解决办法