我想用一个可观察的命令行做一些操作,比如说将 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 添加到计数中,最后在订阅中我应该得到第一个可观察的实际对象。
有人可以帮我解决这个问题并解释一下吗?应引入注释代码以实现要求,以便
示例可观察量应从第一个可观察量发出对象
堆栈闪电战
您似乎正在寻找运算符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
这是更新的堆栈闪电战,其中包含您的预期结果。
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