Я изучаю угловые 2 и rxjs. У меня есть 3 переменных, AB C.Rxjs - Подписывание взаимозависимым наблюдаемым
- B зависит от значения A
- C зависит от значения A и B
Я пытаюсь настроить до наблюдаемых такие, что: Когда A обновляется, B и C будут автоматически обновляться. Когда B будет обновлен, C будет автоматически обновляться. Я попробовал две установки, но они не являются удовлетворительными.
- Первая установка: B подписывается наблюдаемым A; C подписывается наблюдаемым B withlatestfrom A. Изменения в A сделали каскадом вниз до B, затем до C, но значение от A не является последним.
- Вторая установка: B подписывается наблюдаемым A; C выписывает combineLatest наблюдаемых А и В. Этой установки работает, но я получаю два обновления для C, первый из B, а затем из А.
Как я могу настроить свои наблюдаемые/подписка, например, что, когда А обновлено, C будет обновляться только один раз с последним значением от A и B?
EDIT - КОДЫ ДОБАВЛЕНО
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