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

Is it safe to assume that the RxJS will trigger the next of each observer in the subscription order?

假设 RxJS 将按照每个观察者订阅的顺序触发其下一个函数是否安全。我有一个 class 和 public 属性 的 BehaviorSubject。对它的第一次订阅将来自 class' 构造函数中的 with 。我想确保此私人订阅的下一个在任何其他订阅之前有效。

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

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

希望对您有所帮助。

实际上,是的,这是安全的; Subject class(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 的一个很好的解释)。

在 "process in subscription order" 不适合我的情况下,我有 运行 个场景,我需要直接控制。在这种情况下,我使用了一个简单的函数将一个可观察对象变成两个,保证其中一个在另一个之前得到通知。您可以使用类似的方法来避免做出订阅将始终按顺序处理的假设,但我个人认为这没有必要。如果有兴趣,您可以在这里找到详细信息: