为什么我的RxJ状态更改显示无序?

时间:2018-01-12 20:23:10

标签: rxjs rxjs5 reactivex reactive

当订户修改另一个订户的值时,第二个订户不按顺序处理其结果。

示例代码:

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

我做错了什么?

1 个答案:

答案 0 :(得分:3)

从v5起,rxjs没有保证重入(尝试更新订阅中的源代码值)按顺序工作。这是由于可观察源默认情况下没有进行特定的调度,因此大多数同步源的订阅同步运行,而其他一些订阅源则不同步。如果您希望通过重入实现某个执行顺序,则应根据所需行为调度可观察的调度程序,或者使用调度程序创建observable(静态创建方法通常接受调度程序)或使用observeOn / {{1} }。