在下面的示例中,每次 onNext 调用都会调用 map 两次,这是不必要的,因为两个观察者可以重复使用 ds 的相同值。如何编写代码,使得每次 onNext 调用只调用一次 map ?或者我应该使用 promise ?
var subject = new Rx.BehaviorSubject(42);
var ds = subject.map(function(x) {
console.log("processing");
return x + 100;
});
var subscription1 = ds.subscribe(
function (x) {
console.log('first observed: ' + x.toString());
}
);
var subscription2 = ds.subscribe(
function (x) {
console.log('second observed: ' + x.toString());
}
);
subject.onNext(56);
subject.onNext(134);
最佳答案
最简单的方法是通过share
“共享”订阅。运算符。
这是最简单的方法:
var subject = new Rx.BehaviorSubject(42);
var ds = subject.map(function(x) {
console.log("processing");
return x + 100;
}).share();
var subscription1 = ds.subscribe(
function (x) {
console.log('first observed: ' + x.toString());
}
);
var subscription2 = ds.subscribe(
function (x) {
console.log('second observed: ' + x.toString());
}
);
subject.onNext(56);
subject.onNext(134);
// => processing
// => first observed: 142
// => processing
// => first observed: 156
// => second observed: 156
// => processing
// => first observed: 234
// => second observed: 234
关于javascript - 当一次就足够时,RxJs 响应式(Reactive)映射被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028544/