为什么RxJS retryWhen运算符完成其内部Observable?

时间:2019-03-17 19:07:35

标签: rxjs rxjs6

为什么retryWhen用其内部的Observable来完成?

想象一下,我们需要进行最多 3 次尝试来获取数据。而且,例如,我们的第三次尝试肯定会成功。因此,我尝试以下操作:

// ...
retryWhen(errors$ =>
  errors$.pipe(
    take(3)
  )
)

将进行3次尝试,但在出现第3次错误后立即完成,以及其内部可观察到的内容。即使我们的第三次尝试即将给我们带来结果。

说明:

retryWhen completing with inner Observable

Run this example

更新后的提示:可能是为了适当地限制重试次数,我们应该use switchMap to switch based on index to of(error) or to throwError(error)

对于我来说,这种行为是出乎意料的:因为尽管我能观察到内部情况,但只会触发重试。并且一旦通知重试-它的工作就完成了,我们不在乎它是否完成。

所以这个问题是理论上的,然后是实际的:

此特定行为背后的原因是什么?它有什么优势?

注意:这不是问题,操作员的行为符合说明

  

返回一个Observable,该Observable与源Observable镜像   错误的例外。如果源Observable调用错误,则此   方法将引发导致错误的Throwable发送给Observable   从通知程序返回。 该可观察呼叫是否完成或出错   那么此方法将在子级上调用complete或error   。否则,该方法将重新订阅源   可观察的。

0 个答案:

没有答案