我有 rxjs 主题 onEdit$ 发出值。我订阅了这个主题,当值被发出时,我调用 http 请求来检索数据。
const onEditSubscription = onEdit$.pipe(
tap(x => console.log("on Edit")),
concatMap((data) => this.svc.getAggregate(data as number)),
retry(), // <==
).subscribe({
next : (data) => console.log(data),
error : (err) => console.log("error")
});
我放置了
retry
运算符来保持订阅活跃。
现在,当存在 retry
运算符时,如果发生错误 this.svc.getAggregate 该错误不会到达订阅(我的目标是让错误冒泡并由全局错误处理程序处理)。
如果我删除 retry
,则会记录错误,但对 onEdit$ 主题的订阅将被取消。
如何同时获得这两件事,保持订阅活动并允许错误冒泡?
onEdit$ 永远不会出错,我想(看起来像一个事件发射器),所以你可以只处理请求的错误并返回 EMPTY 以防止在捕获错误的情况下发出 observable 。
const onEditSubscription = onEdit$.pipe(
tap(x => console.log("on Edit")),
concatMap((data) => this.svc.getAggregate(data as number).pipe(
catchError((err) => {
console?.error(err); // or global err handler
return EMPTY;
})
)),
).subscribe({
next : (data) => console.log(data)
});