Соединение труб RxJS с оператором IF в середине - PullRequest
0 голосов
/ 26 ноября 2018

Я получаю значение и на основании возврата, если данные действительно возвращаются в первый раз, когда я просто отправляю их и продолжаю, в противном случае, если ничего не возвращается, я получаю значения по умолчанию и продолжаю работу с данными.

Моя проблема - возврат данных по умолчанию после оператора 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 голосов
/ 26 ноября 2018

Просто вместо 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 теперь возвращают наблюдаемые.Это concatMap, кто подписывается на них и выдает их результаты дальше.

...