我有以下js代码。
var a = new Rx.BehaviorSubject(1);
var b = new Rx.BehaviorSubject(2);
var c = new Rx.BehaviorSubject(3);
var total = Rx.Observable.zip(a,b,c, d3.sum);
var observer1 = Rx.Observer.create(
function (x) {
console.log('this is an oberservation from A: ' + x);
}
);
var observer2 = Rx.Observer.create(
function (x) {
console.log('this is an oberservation from TOTAL: ' + x);
}
);
var subscription1 = a.subscribe(observer1)
var subscription2 = total.subscribe(observer2)
a.onNext(5)
目标是当a
更新时,total
会更新,并且我们可以看到observer2
中打印的结果。但是,当我运行它时的输出是:
this is an oberservation from A: 1
this is an oberservation from TOTAL: 0
this is an oberservation from A: 5
为什么我没有看到新的总数,为什么最初的总错?
当我用d3.sum
作为reducer函数替换function(a,b,c){return a + b + c}
时,至少初始TOTAL分数是正确的。我不知道这是否是一个相关问题,但如果是,我想知道出了什么问题。
答案 0 :(得分:1)
使用时可以使用
var total = Rx.Observable.combineLatest(a,b,c, function(a,b,c){return a + b + c})
等待a
,b
和c
之前的代码在将消息传递给observer2
之前至少更改了一次。
另请参阅docs。