我已经和RxJS合作了一段时间,我仍然无法掌握主题。
文档包含以下内容
var source = Rx.Observable.from([1, 2, 3]);
var subject = new Rx.Subject();
var multicasted = source.multicast(subject);
但这有什么不同?:
var source = Rx.Observable.from([1, 2, 3]);
var multicasted = source.share();
我经常需要创建暴露Observables的类,但我不想公开Subjects,因为它们具有下一个函数。我不希望使用类能够将东西推入管道。我现在这样做:
var observer = null;
var sourceToBeExposed = Rx.Observable.create(ob => {
observer = ob;
}).share();
// then later
if (observer != null)
observer.next(newValue);
我正在努力弄清楚为什么主题存在以及它们的主要目的是什么。我确定我错过了一些重要的东西。是否有人可以指向我的主题的好例子?
答案 0 :(得分:1)
如果您正在寻找一种不在Typescript中公开Subject.asObservable()
的方法,可以返回{{1}}
(请注意,虽然这只会屏蔽Typescript中的源访问,但在转换为JavaScript之后,仍然可以通过私有属性访问可观察的源)