gpt4 book ai didi

javascript - Observable 与 Subject 和 asObservable

转载 作者:可可西里 更新时间:2023-11-01 02:24:01 25 4
gpt4 key购买 nike

我正在学习 RxJs,我正在寻求对我的假设的确认或纠正。

我正在尝试在我可以在我的服务类的不同位置使用 .next() 的服务中使一个公共(public)只读可见。我想知道这是否是正确的方法:

private myObservable = new Subject<T>();
public myObservable$: Observable<T> = this.myObservable.asObservable();
  • 用户可以订阅myObservable$
  • 我可以使用myObservable.next(...);

它工作得很好,但我有足够的经验知道我可能只是一个不知情的白痴(RxJS 是巨大的)。对于所述用例,这是正确的模式和正确的对象吗?

最佳答案

你所做的是正确的。然而,还有一个更短的符号。由于 Subject 已经是一个 Observable(它继承了 Observable 类),您可以将类型检查留给 TypeScript:

private myObservable = new Subject<T>();
public myObservable$: Observable<T> = this.myObservable;

您服务的任何消费者都可以订阅 myObservable$ 但无法调用 myObservable$.next() 因为 TypeScript 不允许您这样做(Observable 类没有任何 next() 方法)。

这实际上是推荐的做法,RxJS 内部从不使用 asObservable 无论如何。有关更详细的讨论,请参阅:

看到一个非常相似的问题:Should rxjs subjects be public in the class?

关于javascript - Observable 与 Subject 和 asObservable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48935584/

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