在rxjs中,我想对多个平面图进行条件处理,因此我不执行第二个和第三个平面图,而是直接进入subscribe:
this.authenticationAPI.getUser()
.flatmap(response1 => if(response1 != null) // I want to go directly to subscribe
.flatmap(response2 => return observable2(response2))
.flatmap(response3 => return observable3(response3))
.subscribe(response 4 => console.log(response4));
我考虑过将null的可观察变量传递给第二和第三平面图,但是还有其他解决方案吗?
答案 0 :(得分:4)
您应该将情况分为两种:使用filter
的失败和成功。这种方式更具声明性,更易于阅读
const response$ = this.authenticationAPI.getUser();
// failure
response$
.filter((res) => !res)
.subscribe(() => {
console.log('Unauthentication')
});
// success
response$
.filter((res) => res)
.flatmap(response2 => return observable2(response2))
.flatmap(response3 => return observable3(response3))
.subscribe(response 4 => console.log(response4));
答案 1 :(得分:2)
最好通过稍微嵌套平面图来获得最好的服务-本示例使用RxJS 5.5 / 6“管道”运算符,如果您使用的是RxJS的早期版本,则需要对此稍作翻译以映射到较旧的版本语法(如果需要请添加注释,我将添加一个示例):
this.authenticationAPI.getUser().pipe(
map((response1) => {
if (response1 != null) return of(response1);
else return of(response1).pipe(
flatMap((response2) => observable2(response2)),
flatMap((response3) => observable3(response3))
)
})
).subscribe(response1or4 => console.log(response1or4));