RxJs 6 - Реакция на concatMap в условиях фильтра или takeWhile - PullRequest
0 голосов
/ 30 октября 2018

Я использую concatMap для двух последовательных вызовов API, но второй должен выполняться, только если установлен флажок. Так вот мой код:

this.myService.createArticle(article)
  .pipe(
    filter(() => this.checkbox),
    concatMap(() => return this.mailer.createOtherResource(data)),
  }).subscribe(
    (x) => { console.log('OK', x); },
    error => console.error('FALLA', error),
    () => console.log('Finally I have really reached the END')
  );

Дело в том, что, если флажок не установлен, даже если первая наблюдаемая не возвращает ошибку, функция OK никогда не запускается, только функция 'finally', и мне нужно сообщить пользователю, что ресурс создан. Что я могу сделать?

Я пробовал с takeWhile вместо pipe, и тот же результат.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Последний обратный вызов вашей подписки запускается только для второго вызова. Если вы хотите, чтобы первый HTTP-вызов вызвал метод, выполните это:

this.myService.createArticle(article)
  .pipe(
    finalize(() => console.log('Finally I have really reached the END (of the first call)'))
    filter(() => this.checkbox),
    concatMap(() => return this.mailer.createOtherResource(data)),
  }).subscribe(
    (x) => { console.log('OK', x); },
    error => console.error('FALLA', error),
    () => console.log('Finally I have really reached the END')
  );
0 голосов
/ 30 октября 2018

Я не знаю, что возвращает ваша createOtherResource функция, но это Наблюдаемая?

Может быть, вам стоит попробовать это:

this.myService.createArticle(article)
  .pipe(
    filter(() => this.checkbox),
    concatMap(() => of(this.mailer.createOtherResource(data))),
  })
  .subscribe(
    (x) => console.log('OK', x),
    error => console.error('FALLA', error),
    () => console.log('Finally I have really reached the END')
  );
...