【问题标题】:Rx: What is the purpose of Subjects? [duplicate]Rx:主题的目的是什么? [复制]
【发布时间】:2017-07-31 22:16:11
【问题描述】:

我使用 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);

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

【问题讨论】:

  • Observable#share() 不返回 Subject
  • 根据文档,多播也没有。 reactivex.io/rxjs/class/es6/…
  • 好的。问题是什么?我不明白。这和Subjects 有什么关系?
  • 主题的目的是什么?它们似乎是与 Observers 合并的 Observables。用例是什么?在多播示例中,主题似乎是多余的。我试图找到一个很好的例子来说明它们的使用。
  • 是的,为指针欢呼

标签: rxjs


【解决方案1】:

如果您正在寻找一种在 Typescript 中不暴露 .next 的方法,您可以返回 Subject.asObservable()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2011-06-28
    • 2020-05-25
    • 2013-01-19
    • 2023-03-30
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多