我想用一个可观察的动作执行某项操作,例如将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,最后在订阅中,我应该获得第一个可观察的实际对象。
有人可以帮我解释一下吗?为了达到要求,应该引入注释代码,以便
observable示例应从第一个observable发出对象
答案 0 :(得分:1)
似乎您要根据所需的逻辑来寻找运算符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
中获取最新值,您可以用它来做任何您想做的事情。
答案 1 :(得分:1)
这是更新的堆叠闪电战,其中包含您的预期结果。
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})
);