Использование функций Rxjs с двумя наблюдаемыми - PullRequest
0 голосов
/ 04 октября 2018

Я хочу выполнить какое-то действие с одним наблюдаемым, скажем, добавить 20 к одному из его свойств.

const mainObservable = of({id:1, count: 20});
const example = mainObservable.pipe(
    map(val=> { val.count+20; return val;})
);

Затем мне нужно проверить условие другого наблюдаемого и, если оно истинно, выполнить другие операции, такие какдобавление 40 к одному из свойств первой наблюдаемой

Комбинированный код:

const mainObservable = of({id:1, count: 20});

const otherObservable = of([10,20]);
const example = mainObservable.pipe(
  map(val=> { val.count+20; return val;}),
  switchMap(outerVal => otherObservable.pipe(map(val=>{
     console.log(outerVal);
     return val.length > 0;
     }))),
 // map(val=> {val.count+ 40, return val})

);

Здесь, если условие otherObservable имеет значение true, тогда мне нужно добавить 40 в числои наконец в подписке я должен получить фактический объект первой наблюдаемой.

Может ли кто-нибудь помочь мне с этим вместе с объяснением?Комментируемый код должен быть введен, чтобы выполнить требование, чтобы

наблюдаемый пример должен испускать объект из первой наблюдаемой

StackBlitz

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вот обновленный стек с ожидаемым результатом.

const example = mainObservable.pipe(
  map(val=> { val.count += 20; return val;}),
      switchMap(outerVal => otherObservable.pipe(map(val=>{
         if(val.length){
           outerVal.count += 40;
         } 
         return outerVal;
         })
      )),
     // map(val=> {val.count+ 40, return val})

    );

https://stackblitz.com/edit/rxjs-tf8r4p

0 голосов
/ 04 октября 2018

Похоже, вы ищете операторов combineLatest или withLatestFrom в зависимости от того, какую логику вы хотите.Например, с withLatestFrom вы можете сделать это следующим образом:

const example = mainObservable.pipe(
  map(val => {
    val.count + 20;
    return val;
  }),
  withLatestFrom(otherObservable),
  map(([first, second]) => {
     console.log(first, second);
     return second.length > 0;
  }),
);

Только когда mainObservable выдает, он принимает самое последнее значение из otherObservable, которое вы можете использовать, чтобы делать все, что вы хотите.

Демонстрация в реальном времени: https://stackblitz.com/edit/rxjs-jnmehl?file=index.ts

...