为什么RxJS在运算符完成其内部可观察时重新执行?

为什么RxJS在运算符完成其内部可观察时重新执行?,rxjs,rxjs6,Rxjs,Rxjs6,当完成其内部可观察性时,为什么要重试 假设我们需要进行最多3次尝试来获取数据。例如,我们的第三次尝试肯定会成功。因此,我尝试以下方法: /。。。 retryWhen(错误$=> 错误$.pipe( 采取(3) ) ) 它将进行3次尝试,但在第3次错误后将立即完成,以及它的内部可观测值。即使我们的第三次尝试即将给我们带来结果 举例说明: 更新说明:可能是为了适当限制重试尝试-我们应该这样做 对我来说,这种行为是出乎意料的:因为我认为内部可观察性只会触发重试。一旦它通知重试,它的工作就完成了,

当完成其内部可观察性时,
为什么要重试

假设我们需要进行最多3次尝试来获取数据。例如,我们的第三次尝试肯定会成功。因此,我尝试以下方法:

/。。。
retryWhen(错误$=>
错误$.pipe(
采取(3)
)
)
它将进行3次尝试,但在第3次错误后将立即完成,以及它的内部可观测值。即使我们的第三次尝试即将给我们带来结果

举例说明:

更新说明:可能是为了适当限制重试尝试-我们应该这样做

对我来说,这种行为是出乎意料的:因为我认为内部可观察性只会触发重试。一旦它通知重试,它的工作就完成了,我们不在乎它是否完成

所以这个问题是理论性的而不是实践性的:

这种特殊行为背后的原因是什么?它的优点是什么

注意:这不是问题,操作员的行为如所述

返回使用 错误的例外。如果源Observable调用error,则 方法将发出对可观察对象造成错误的可丢弃项 从通知程序返回如果该可观察调用完成或错误 然后此方法将对子级调用complete或error 订阅。否则此方法将重新订阅源 可见的


我认为它需要对来自其内部可观察对象的
complete
通知做出反应,因为如果它不这样做,那么就没有办法停止重试。但是,我同意你的观点,从内部可观察对象接收到
complete
后,立即返回
retryWhen
完成,而不是等待源可观察对象做什么,这是违反直觉的。我甚至不认为有任何简单的方法可以解决这个问题。我会想一想,也许明天早上我会有一些好主意…@martin嗯,我想我们可以在需要的时候完成外部观测,例如,
retryWhen(…).takeUntil(…)
。在我看来,我们只需要关心内部可观察到的错误。我认为它需要对来自其内部可观察到的
complete
通知做出反应,因为如果它不这样做,那么就没有办法停止重试。但是,我同意你的观点,从内部可观察对象接收到
complete
后,立即返回
retryWhen
完成,而不是等待源可观察对象做什么,这是违反直觉的。我甚至不认为有任何简单的方法可以解决这个问题。我会想一想,也许明天早上我会有一些好主意…@martin嗯,我想我们可以在需要的时候完成外部观测,例如,
retryWhen(…).takeUntil(…)
。在我看来,我们只需要关心内部可观测误差。