【问题标题】:Is it safe to assume that the RxJS will trigger the next of each observer in the subscription order?假设 RxJS 将按订阅顺序触发每个观察者的下一个观察者是否安全?
【发布时间】:2018-03-05 17:18:07
【问题描述】:

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

【问题讨论】:

    标签: javascript rxjs behaviorsubject


    【解决方案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

    【讨论】:

      【解决方案2】:

      behaviorSubject 和一般的主题而言,它们是产生和消耗值的“热门”可观察对象。你可以假设只要没有调用observer.complete() 方法,下一个函数就会一直触发。

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 2018-07-31
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2018-08-05
        • 2021-04-13
        • 1970-01-01
        相关资源
        最近更新 更多