转换带嵌套的方法订阅RxJS管道

时间:2019-12-03 22:29:00

标签: rxjs

我有一个看起来像(简化)的代码模式:

loadDocs(): DocType {
    this.http.get('/doc/1').subscribe(
      (doc1) => {
        this.http.get('/doc/' + '(something based on doc1)').subscribe(
          (doc2) => {
              return doc2;
          }
        );
      }
    );
  }

我想做的就是将其转换为一个返回Observable的函数,如:

loadDocs(): Observable<TypeDoc> {
    return this.http.get('/doc/1').pipe(
       // ???
    );
}

我确信这是非常基本的,但是到目前为止,我还没有找到有关哪个RxJS的示例 在这种情况下使用运算符。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您正在寻找switchMap

loadDocs(): Observable<TypeDoc> {
    return this.http.get('/doc/1').pipe(
       switchMap(doc1 => this.http.get('/doc/' + '(something based on doc1)'))
    );
}

mergeMapconcatMap在这里的工作原理相同,因为http调用是单个发射可观察的对象,它们之间的区别仅在多次发射的可观察对象中才可见。 IMO switchMap在语义上最适合http调用,因为它暗示只有一个活动的内部订阅,但是对此的看法会有所不同。

它们都是采用当前值并将其映射到他们订阅并返回值的新内部可观察值的高阶运算符