假设RxJS将在订阅顺序中触发每个观察者的下一个是否安全?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假设RxJS将在订阅顺序中触发每个观察者的下一个是否安全?相关的知识,希望对你有一定的参考价值。

是否可以安全地假设RxJS将按照订阅的顺序触发每个观察者的下一个功能。我有一个具有BehaviorSubject公共属性的类。对它进行的第一个订阅将来自类的构造函数。我想确保下一个私人订阅在任何其他订阅之前有效。

答案

实际上,是的,这是安全的; Subject类(BehaviorSubject继承)的实现始终按照它们的顺序处理订阅。虽然我没有看到rxjs团队保证这种情况总是如此,但我想改变这会破坏很多代码(包括我的代码)。

严格来说,不,不保证订阅处理订单。这可以追溯到.NET下的Rx,当团队试图将订阅行为与多播代表的行为对齐时(你可以从https://social.msdn.microsoft.com/Forums/en-US/ac721f91-4dbc-40b8-a2b2-19f00998239f/order-of-subscriptions-order-of-observations?forum=rx的Bart De Smet找到一个很好的解释)。

在“订阅订单处理”不适合我之前,我遇到了各种情况,我需要直接控制。在这种情况下,我使用了一个简单的函数将一个observable变为两个,其中一个保证在另一个之前得到通知。您可以使用类似的方法来避免假设订阅将始终按顺序处理,尽管我个人认为没有必要。如果有兴趣,可以在这里找到详细信息:RxJs: Drag and Drop example : add mousedragstart

另一答案

behaviorSubject和一般主题而言,它们是产生和消费价值的“热”观察者。只要没有调用observer.complete()方法,您可以假设下一个函数将始终触发。

您拥有的第一个订阅将设置并初始化状态(此处为假设),因此每个后续订阅者都可以挂接到该订阅并确定next(value)排放。

希望这可以帮助。

以上是关于假设RxJS将在订阅顺序中触发每个观察者的下一个是否安全?的主要内容,如果未能解决你的问题,请参考以下文章

RxJS主题(Subject)

Rxjs:将中间订阅和完整的可观察对象合并,并整体完成

RXJS Observable的冷,热和Subject

rxjs中常用的操作符

如何在 Angular 和 RxJs 中管理多个顺序订阅方法?

submitForm 上的 Angular 2 RxJS 可观察取消订阅