Angular 6 + RxJs - обработка ошибок для concatMap
Я все еще изучаю 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'])) )
);
Что мне интересно, так это -
- я могу использовать что-то вроде catchError() для каждого запроса?
- Правильно ли это, если я хочу, чтобы запрос 1 завершился до запуска второго запроса?
Спасибо!
1 ответ
Вы могли бы добавить 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)
);