【问题标题】:Use of Rxjs functions with two observables使用带有两个可观察对象的 Rxjs 函数
【发布时间】:2019-03-10 01:00:27
【问题描述】:

我想用一个 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

【问题讨论】:

    标签: typescript rxjs observable rxjs-pipeable-operators


    【解决方案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

    【讨论】:

      【解决方案2】:

      您似乎正在寻找运算符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

      【讨论】:

      • 但仍然订阅示例返回 true,它应该返回已修改的对象
      • 那么只需return first; 而不是return second.length > 0
      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2019-01-30
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多