【问题标题】:Replace RxJs errors to prevent completion of action streams替换 RxJs 错误以防止操作流完成
【发布时间】:2019-10-03 10:09:14
【问题描述】:

即使出现错误,我也希望我的操作流继续。在那里,我创建了一个 catch 和 replace 观察者,它用一个空的 observable 替换了错误调用。现在,当出现错误时,observable 会立即完成操作,尽管有替换。

有没有办法显示错误但让动作流继续发出动作?

The catch and replace code is in my stackblitz

【问题讨论】:

标签: angular rxjs observable


【解决方案1】:

根据rxjs的官方文档:(https://rxjs-dev.firebaseapp.com/guide/observable)

在 Observable Execution 中,可能会传递零到无限的 Next 通知。如果发送了错误或完成通知,则之后无法发送任何其他通知。

您可以选择retry 运算符或将您的 Observable 更改为类型 Observable<Data | Error>,区分这些排放物并尊重处理。

    setTimeout(() => {
      observer.next({data: 'Some data'});
    }, 7000);

    setTimeout(() => {
      observer.next({error: 'Some error message'});
    }, 8000);

【讨论】:

    【解决方案2】:

    很少有办法阻止流完成

    在内部 Observable 中包含您的操作:

    source.pipe(switchMap(x=>
         defer(()=>.... some operation that might throw).pipe(catchError(e=>of(e))))
    

    使用 repeat() 或 repeatWhen()

    source.pipe(catchError(e=>of(e)),repeat())
    

    使用 retry() - 谨慎使用,大多数时候错误不会消失,你最终会陷入无限循环

    source.pipe(retry())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多