angular - 总是使用 BehaviorSubject 而不是 Subject (RxJs\Angular) 有什么缺点吗?

标签 angular rxjs

我正在从事一个项目,其中部分代码库非常自由地使用 BehaviorSubject。在大多数情况下,在没有初始状态或需要在第一个显式“onNext/emit”之外设置初始值时使用。

我很难确定这是否有任何缺点?另外,如果不是,为什么不是每个人都总是使用 BehaviorSubject(甚至在没有参数的情况下构建)而不是标准的 Subject?

提前致谢!

最佳答案

除了初始值之外,BehaviorSubject 与 Subject 完全不同:它也像 ReplaySubject(1)。这意味着新订阅者将始终获得同步发出的最后(或初始)值。使用主题,您只会获得订阅后发生的排放量。

因此,如果您想在服务中存储数据,BehaviorSubject 通常是一个不错的选择。另一方面,Subject 可能更适合向订阅者发送事件。

换句话说,当您不关心过去时,请使用 Subject。


就初始值而言,不管这些影响如何:如果你不需要,就不要使用。为什么?因为。我的意思是你也可以随时写

var x;
x = 5;

代替

var x = 5;

但是……你为什么要这么做?

不要发出订阅者需要努力忽略的事件。一个典型的 Angular 案例是使用一个 Subject ,你在 ngOnDestroy 中发出 + complete 这样你就可以使用 takeUntil 来限制组件中的订阅。如果它是一个 BehaviorSubject,它就不会工作。

关于angular - 总是使用 BehaviorSubject 而不是 Subject (RxJs\Angular) 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504713/

相关文章:

Visual Studio 2017 中的 Angular 5 看不到文件更改

angular - Ionic 4 弹出窗口出现在屏幕外

angular - 使用Nginx构建Docker镜像

angular - 如何在 Angular 中使用 router.navigateByUrl 和 router.navigate

javascript - 更新服务中的新值

javascript - Rxjs 订阅队列

Angular CLI : Proxy websocket with proxy. conf.json

rxjs - 我们应该为每个 Action 类型创建一个 Epic 吗?在 redux-observable 中

Angular 2 将三个 http 调用与 flatMap 结合起来?接收者?

javascript - 如何在函数 rxjs 中使用 observable 和管道?