RxJs。如果我有两个 observable,如何抛出错误并继续发出值?
Posted
技术标签:
【中文标题】RxJs。如果我有两个 observable,如何抛出错误并继续发出值?【英文标题】:RxJs. How to throw error and continue emiting values if I have a two observable? 【发布时间】:2021-12-27 04:39:37 【问题描述】:https://stackblitz.com/edit/rxjs-catcherror-withmapoperators-lwutxg?file=index.ts
const fakeRequest$ = of().pipe(
tap((_) => console.log('fakeRequest')),
throwError
);
const iWillContinueListening$ = fromEvent(
document.getElementById('continued'),
'click'
).pipe(
switchMap((_) =>
fakeRequest$.pipe(
catchError((_) =>
return throwError('x');
)
)
)
);
const parent = iWillContinueListening$.pipe(
catchError((err) =>
console.log('er', err);
return of('err');
)
);
parent.subscribe(console.log);
如何在 iWillContinueListening$ 出错时激活 catchError on parrent 并仍然发出值?
【问题讨论】:
也许retry
或retryWhen
是您需要的? learnrxjs.io/learn-rxjs/operators/error_handling/retrylearnrxjs.io/learn-rxjs/operators/error_handling/retrywhen
我很难说出你想做什么。当链发出error
通知时,它将终止并且永远不会再有next
排放。也许您正在寻找 retry()
或者甚至是 onErrorResumeNext()
?
【参考方案1】:
为了查看你想要达到的效果,你的iWillContinueListening$
observable 永远不应该抛出错误。它应该捕获错误并返回一个备用值。
const iWillContinueListening$ = fromEvent(
document.getElementById('continued'),
'click'
).pipe(
switchMap((_) =>
fakeRequest$.pipe(
catchError((_) =>
//return throwError('x'); <--commenting this
return of('x'); <-- adding this
)
)
)
);
【讨论】:
以上是关于RxJs。如果我有两个 observable,如何抛出错误并继续发出值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular/RxJS 中合并两个 observable?
RxJS:如何将 Observable<Observable<Thing>> 转换为 Observable<Thing[]>