gpt4 book ai didi

javascript - 如何在不向 RxJs v5 中的消费者公开 Subject 的情况下从 Subject 创建 Observable

转载 作者:行者123 更新时间:2023-11-29 15:23:52 29 4
gpt4 key购买 nike

我正在尝试从内部使用 Rx.Subject 的函数返回一个可观察对象。当然,与任何好的 API 一样,实现细节应该完全从消费者那里抽象出来。但是,使用 Subject.asObservable() 似乎可以让任何消费者向所有观察者发布新值。

例子:

const subject = new Rx.Subject();
const observable = subject.asObservable();

observable.source === subject; // true

observable.forEach(value => console.log(value));
observable.source.next('Hello');
// Causes the forEach above to print "Hello"

所以我的问题是,是否有一种内置方法可以向消费者公开 Observable 而无需让他们访问原始主题?如果不是,这显然是 RxJs 的糟糕设计。

注意:这是针对 RxJS v5 的

最佳答案

据我所知,真正封装它的唯一方法是在您的函数中订阅主题,并返回另一个(主题或自定义 obervable)发出这些值( s).

但是任何运算符(甚至像 Observable.combineLatest(subject) 这样的创建运算符)都有一些访问源的方法。

“解决”这个问题的另一种方法是使用 Typescript,因为 TS 编译器会告诉您,您不能访问 Observable 上的 protected 属性 source,因为它不是公共(public)属性:https://github.com/ReactiveX/rxjs/blob/master/src/Observable.ts#L30 - 当然在 ES5 中没有“ protected ”这样的东西,因此它仍然可以通过控制台访问,例如

关于javascript - 如何在不向 RxJs v5 中的消费者公开 Subject 的情况下从 Subject 创建 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273093/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com