代码之家  ›  专栏  ›  技术社区  ›  AlanObject

将具有嵌套订阅的方法转换为RxJS管道

  •  0
  • AlanObject  · 技术社区  · 5 年前

    我有一个代码模式,看起来(简化)如下:

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

    我想做的是把它转换成一个函数,返回一个可观察的值,比如:

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

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

    1 回复  |  直到 5 年前
        1
  •  3
  •   bryan60    5 年前

    你在找 switchMap 在这种情况下:

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

    mergeMap concatMap 在这里也是一样的,因为http调用是单发射观测值,它们之间的差异只有在发射多次的观测值中才明显。依我所见 开关图 对于http调用,它在语义上是最正确的,因为它意味着只有一个活动的内部订阅,但对此的看法会有所不同。

    它们都是高阶算子,获取当前值并将其映射到一个新的内部可观测值,然后订阅并返回该值