Rx:主题的目的是什么?

时间:2017-03-10 14:20:34

标签: rxjs

我已经和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);

我正在努力弄清楚为什么主题存在以及它们的主要目的是什么。我确定我错过了一些重要的东西。是否有人可以指向我的主题的好例子?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找一种不在Typescript中公开Subject.asObservable()的方法,可以返回{{1}}

(请注意,虽然这只会屏蔽Typescript中的源访问,但在转换为JavaScript之后,仍然可以通过私有属性访问可观察的源)