代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

中间有IF语句的RXJS管道链接

  •  0
  • Alfa Bravo  · 技术社区  · 6 年前

    我得到一个值,根据返回值,如果第一次实际返回数据,我只发送它并继续,否则如果没有返回值,我得到默认值并继续数据。

    我的问题是在IF语句之后返回默认数据。我无法让它返回数据,而不是可观察/订阅

    它看起来像这样:

    getValuesFunction() {
        const getFirstValues$ = this.ApiCall.getFirstValues();
        this.subscription = getFirstValues$.pipe(
            map(data => {
               if (data.length === 0) {
                  // this line is the one I have a problem with
                  return this.processedStockApi.getDefaultValues().subscribe();
               } else {
                  // this line returns fine
                  return data;
               }
            }),
            switchMap(data => this.apiCall.doSomethingWithData(data))
        ).subscribe();
    }
    

    //阿皮卡尔

    getDefaultValues() {
        return this.http.get<any>(this.stockUrl + 'getSelectiveDeleteData');
    }
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   martin    6 年前

    map 使用它的一个变体来处理可观察对象,如 concatMap mergeMap switchMap 在这种情况下也会起作用):

    getFirstValues$.pipe(
      concatMap(data => {
        if (data.length === 0) {
          // this line is the one I have a problem with
          return this.processedStockApi.getDefaultValues();
        } else {
          // this line returns fine
          return of(data);
        }
      }),
      switchMap(data => this.apiCall.doSomethingWithData(data)),
    ).subscribe(...);
    

    if-else 块现在返回可观测值。它是 海图