我需要进行2次API调用,第一个将始终执行并返回true或false。如果第一个返回true,则第二个只能调用subscribe。
是否有Rxjs运算符可用于此操作,而不是将订阅置于订阅中?
当调用2个订阅时,我使用了switchmap,但是在那种情况下,我将结果从1传递给2,因此必须始终执行2。
如果不需要,我想在这里避免第二次通话。
答案 0 :(得分:1)
IMK本身没有rxjs运算符,这更多是自定义应用程序的需要,您将必须为此编写自己的逻辑。通过管道化可观察对象而不是多次订阅来执行此逻辑。
firstApiCall('url').pipe(
mergeMap((data) => { // your flattening operator
if (data) {
return secondApiCall('url')
}
return of(data)
}
)).subscribe((data) => {
console.log(data)
});
答案 1 :(得分:1)
请参阅本文。
OR
https://rxjs-dev.firebaseapp.com/api/index/function/iif
RXJS “ IFF” 运算符提供了三元运算符的一种行为。
firstCall(args).pipe(
iif(res => res===true,secondCall(otherArgs),EMPTY),
).subscribe(doStuff);
答案 2 :(得分:0)
将filter
放在switchMap
之前。
firstCall(args).pipe(
filter(res => res === true),
switchMap(() => secondCall(otherArgs),
).subscribe(doStuff);