处理 RxJS 链中的错误

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

我有 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$ 主题的订阅将被取消。

如何同时获得这两件事,保持订阅活动并允许错误冒泡?

rxjs
1个回答
0
投票

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)   
});
© www.soinside.com 2019 - 2024. All rights reserved.