Angular 6 + RxJs - concatMap的错误处理

问题描述 投票:1回答:1

我还在学习RxJs,我正在尝试使用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,这是正确的吗?

谢谢!

angular error-handling rxjs6 concatmap
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)
);

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

© www.soinside.com 2019 - 2024. All rights reserved.