如何在 RxJs 5 中将 Subject 转换为 Observable

How to transform a Subject into an Observable in RxJs 5

我们如何在 RxJs 5 中将 Subject 转换为 Observable?此功能非常有用,例如,当我们想要公开订阅主题但又不想放弃对其调用 next() 的控制权,并且更愿意将新值的发布保密时。

文档(参见 here)提到了这样的事情:

var subject = new Rx.Subject();

var obs = subject.asObservable();

但是在 RxJs 5 中这目前不起作用(alpha 8),我们得到以下错误:

"TypeError: subject.asObservable is not a function

RxJS 5 是一个重写版本(目前处于测试阶段)并且有很多 renamed/removed methods,以及其他变化。删除的其中一个是 asObservable.

您可以通过使用私有主题的订阅函数创建一个可观察对象来获得相同的功能:

const subj = new rx.Subject();
const exposed = new rx.Observable(fn => subj.subscribe(fn));

仅供参考:Subject.prototype.asObservable() 将在下一个版本中 5.0.0-beta.2

到时候,你可以调用mySubject.asObservable()