为什么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(…)
。在我看来,我们只需要关心内部可观测误差。