【问题标题】:Why do my RxJs state changes show up out of order?为什么我的 RxJs 状态更改出现乱序?
【发布时间】:2018-06-22 08:14:08
【问题描述】:

当一个订阅者修改另一个订阅者的值时,第二个订阅者会乱序处理其结果。

示例代码:

subject = new Rx.BehaviorSubject()
subject.next({value: 'Test1'})
v1 = subject.pluck('value').distinctUntilChanged()
v2 = subject.pluck('value2').distinctUntilChanged()
h1 = v1.subscribe(function(it) { if (it == 'Test2') subject.next({value: it, value2: true}) })
h2 = v2.subscribe(function(it) { console.log('v2', it) })
subject.next({value: 'Test2'})

预期结果:

v2 undefined
v2 true

实际结果:

v2 undefined
v2 true
v2 undefined

我做错了什么?

【问题讨论】:

    标签: rxjs rxjs5 reactivex reactive


    【解决方案1】:

    从 v5 开始,rxjs 不保证可重入性(尝试更新订阅中的源值)按顺序工作。这是由于 observable 源默认不做特定的调度,所以大部分同步源的订阅是同步运行的,而有些则不是。如果你想通过可重入实现特定的执行顺序,你应该根据你想要的行为调度 observable,或者使用调度器创建 observable(静态创建方法通常接受调度器)或使用observeOn/subscribeOn

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 2016-09-28
    • 1970-01-01
    • 2019-08-03
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多