将 Rxjs 函数与两个可观察量一起使用



我想用一个可观察的命令行做一些操作,比如说将 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 的条件为真,那么我需要将 40 添加到计数中,最后在订阅中我应该得到第一个可观察的实际对象。

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

示例可观察量应从第一个可观察量发出对象

堆栈闪电战

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

这是更新的堆栈闪电战,其中包含您的预期结果。

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

最新更新