另一种可能性是在 SwitchMap 中使用运算符 iif。
https://www.learnrxjs.io/learn-rxjs/operators/conditional/iif
https://rxjs-dev.firebaseapp.com/api/index/function/iif
但它可以限制在 Observable 上控制特定条件的可能性:
myObservable1
.pipe(
switchMap(result1 =>
iif(() => condition
, myObservable2
, myObservable1
)
)
.subscribe(result => console.log(result));
您可以通过返回布尔值的函数替换“条件”。有一个功能:
myObservable1
.pipe(
switchMap(result1 =>
iif(() => test(result1)
, myObservable2
, myObservable1
)
)
.subscribe(result => console.log(result));
test(result1) : boolean {
if(result1){
// the iif() will return myObservable2
return true;
}else{
/: the iif() will return myObservable1
return false ;
}
}
就像@amjuhire 所说,您可以使用过滤器和 switchMap 编写:
myObservable1.pipe(
filter((result1) => condition)
switchMap((result1: MyObservable1) => {
return myObservable2;
})
).subscribe(result2 => { ... })
给出您的示例的另一种可能性:
myObservable1.pipe(
switchMap((result1: MyObservable1) => {
if (condition) {
return myObservable2;
} else {
return of(result1);
}
})
subscribe(result => console.log(result));
或者在 switchMap 中使用 EMPTY :
myObservable1.pipe(
switchMap((result1: MyObservable1) => {
if (condition) {
return myObservable2;
} else {
// Observable that immediately completes
return EMPTY;
}
})
subscribe(result2 => console.log(result2));
这里的问题是我们不知道您的 observable 中的类型。
所以我无法判断哪种方式更好。
它还取决于您希望如何处理 observable 的不同调用之间的成功/错误。