如何在不使用已弃用的 retryWhen 的情况下在 RxJs 中延迟重试?

面对它

我想延迟重试一个可观察的链(比如 2 秒)。

有一些类似的问题回答了retryWhenretryWhen似乎已弃用,我不想使用它。

  • 延迟和重试仅在第一次尝试失败时适用
  • 如果所有重试都失败,我想用默认数据进行响应。

以下代码有效,不增加延迟。而且我不知道如何在这个链中添加延迟。

of('trigger')
  .pipe(
    switchMap(() => fetchData()),
    retry(5),
    catchError(() => of(returnThisIfRetriesAreFailed))
  )
  .subscribe(console.log);

堆栈闪电战

我尝试添加delay(2000),但似乎不起作用。

格格拉尼格

不知道你的意思

延迟和重试仅在第一次尝试失败时适用

我在源代码中找不到任何delay选项限制为仅适用于第一次失败尝试的条件。

因此,您应该能够将固定数字或 Observable 作为延迟传递。例如:

of('trigger')
  .pipe(
    switchMap(() => fetchData()),
    retry({count: 5, delay: 2000}),
    catchError(() => of(returnThisIfRetriesAreFailed))
  )
  .subscribe(console.log);

如果你的意思是你只想延迟第一次重试,那么你可以尝试这样的事情:

of('trigger')
  .pipe(
    switchMap(() => fetchData()),
    retry({count: 5, delay: (_, retryCount) => retryCount === 1 ? timer(2000) : of({})}),
    catchError(() => of(returnThisIfRetriesAreFailed))
  )
  .subscribe(console.log);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章