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

问题描述 投票:1回答:2

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

javascript rxjs behaviorsubject
2个回答
1
投票

实际上,是的,这是安全的; 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


-1
投票

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

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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.