Angular 6 + RxJs - обработка ошибок для concatMap - PullRequest
0 голосов
/ 02 марта 2019

Я все еще изучаю RxJ и пытаюсь использовать concatMap (), чтобы НЕ использовать вложенные подписки.Я хочу, чтобы первый вызов был запущен, а затем задержался на секунду или две (создание записи в базе данных перед вторым запросом) перед выполнением второго запроса.Я также хочу добавить обработку ошибок для каждого запроса специально, чтобы я мог отлавливать ошибки для них по отдельности.

Пока у меня есть кое-что, что выполняет запрос 1, задерживает, а затем выполняет запрос 2.

return this.request_1(postData).pipe(
      concatMap(res => of(res).pipe( delay( 2000 ) )),
      concatMap(res => this.request_2(parseInt(data.id), parseInt(model['_id'])) )
    );

Что мне интересно -

  1. можно ли использовать что-то вроде catchError () для каждого запроса?
  2. это правильно, если я хочу, чтобы запрос 1 завершился довторой запрос выполняется?

Спасибо!

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете добавить catchError к каждому запросу.но до тех пор, пока вы не хотите изменять объект ошибки, я бы предпочел просто один catchError в конце канала.это просто отправляет подписчику каждую ошибку.

Сама обработка ошибок может быть выполнена в подписке

const source = of('World').pipe(
  concatMap(res => of(res).pipe(
    delay(2000),
    map(res => res += ' + concat 1')
  )),
  concatMap(res => of(res).pipe(
    map(res => res.h += ' + concat 2')
  )),
  catchError(err => throwError(err))
);

source.subscribe(
  x => console.log(x),
  error => console.log('error', error)
);

https://stackblitz.com/edit/rxjs-6dign7

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