71. 实现 Observable Subject

中等难度  -通过 / -执行

本问题是 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。

注意特例。

(28)