Angular 6 + RxJs - concatMap 的错误处理
Angular 6 + RxJs - Error handling for concatMap
我仍在学习 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'])) )
);
我想知道的是 -
- 我可以在每个请求上使用类似 catchError() 的东西吗?
- 如果我希望请求 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)
);
我仍在学习 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'])) )
);
我想知道的是 -
- 我可以在每个请求上使用类似 catchError() 的东西吗?
- 如果我希望请求 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)
);