我正在學習angular 2和rxjs。我有3個變量,AB C.Rxjs - 訂閱相互依存的觀察對象
- B依賴於一個
- C的值取決於A的值與B
我想設置了觀測這樣的:當A更新時,B和C將自動更新。當B被更新時,C將被自動更新。我嘗試了兩種設置,但不能令人滿意。
- 第一次設置:B訂閱可觀察的A; C訂閱了可觀察到的B ,其中最高爲 A. A中的變化確實級聯到B然後級聯到C,但A的值不是最新的。
- 第二設置:B訂閱可觀察的A; ç訂閱combineLatest觀察到A和B.此設置的作品,但我通過B獲得兩個更新爲C,第一,然後從A
我如何設置我的觀測/訂閱這樣的:當A是更新後,C只會用A和B的最新值更新一次?
編輯 - 碼ADDED
var A = new Rx.BehaviorSubject(1);
var A_Observable = A.asObservable();
var B = new Rx.BehaviorSubject(10);
var B_Observable = B.asObservable();
A_Observable.subscribe(function(A_value) {
var newB = A_value * 10;
// console.log("B auto updating to " + newB);
B.next(newB);
});
// LATEST FROM OBSERVABLE
var latestFromObservable = B_Observable.withLatestFrom(A_Observable);
latestFromObservable.subscribe(function(data) {
console.log("LATEST FROM : Value for A is " + data[1] + " ; Value for B is " + data[0]);
});
// COMBINE ALL OBSERVABLE
var combineAllObservable = Rx.Observable.combineLatest(A_Observable,B_Observable);
combineAllObservable.subscribe(function(data) {
console.log("COMBINE LATEST : Value for A is " + data[0] + " ; Value for B is " + data[1]);
});
// UPDATE TO A
setTimeout(function(){
console.log("UPDATING A");
A.next(2);
},1000);
// SATISFACTORY RESULT
setTimeout(function(){
console.log("SATISFACTORY RESULT : Value for A is 2 ; Value for B is 20 --- CALLED ONLY ONCE WITH LATEST VALUES");
},2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.1/Rx.min.js"></script>
如果您包含代碼而不是代碼的描述,則您的問題會更清晰。 – cartant