0

我想用一个 observable 执行一些操作,比如将 20 添加到其属性之一

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

然后我需要检查其他 observable 的条件,如果它是真的,然后执行进一步的操作,比如将 40 添加到第一个 observable 的属性之一

组合代码:

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 的条件为真,那么我需要将 40 添加到 count 中,最后在订阅中我应该得到第一个 observable 的实际对象。

有人可以帮我解释一下吗?应引入注释代码以实现要求,以便

示例 observable 应该从第一个 observable 发出对象

StackBlitz

4

2 回答 2

1

这是更新后的 stackblitz 与您的预期结果。

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

于 2018-10-04T16:48:13.240 回答
1

似乎您正在寻找运算符combineLatestwithLatestFrom取决于您想要的逻辑。例如,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

于 2018-10-04T15:27:43.680 回答