条件在 rxjs 中执行平面图 - angular 5

Condition the execution of a flatmap in rxjs - angular 5

在 rxjs 中,我想在多个平面图上设置条件,所以我不执行第二个和第三个平面图,而是直接转到订阅:

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 observables 传递给第二个和第三个平面图,但还有其他解决方案吗?

您应该区分两种情况:使用 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));

最好稍微嵌套平面图 - 此示例使用 RxJS 5.5/6 "pipe" 运算符,如果您使用的是早期版本的 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));