中间带有IF语句的RxJS管道链接

时间:2018-11-26 13:29:07

标签: angular rxjs pipe observable

我正在获取一个值,并基于返回值,如果实际在第一次返回数据时,我只是将其发送并继续进行,否则,如果没有返回,我将获得默认值并继续处理数据。

我的问题是在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();
}

// ApiCall

getDefaultValues() {
    return this.http.get<any>(this.stockUrl + 'getSelectiveDeleteData');
}

1 个答案:

答案 0 :(得分:1)

只需使用mapconcatMap即可使用mergeMap的变体之一,即可与switchMapgetFirstValues$.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

请注意,两个concatMap块现在都返回Observables。 mapStateToProps订阅了它们并进一步发出结果。