Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么在retryWhen计时器结束时使用take(1)?_Swift_Timer_Rx Swift_Retry Logic - Fatal编程技术网

Swift 为什么在retryWhen计时器结束时使用take(1)?

Swift 为什么在retryWhen计时器结束时使用take(1)?,swift,timer,rx-swift,retry-logic,Swift,Timer,Rx Swift,Retry Logic,我在看电视 .retryWhen{中的错误 返回errors.enumerated().flatMap{(尝试,错误)->在 如果尝试次数>=最大尝试次数-1{ 返回可观察错误(error) } 返回可观察计时器(双精度(尝试+1),调度程序: MainScheduler.instance)。获取(1) } } 计时器没有使用周期变量,因此它只触发一次,不会重复。那么,它为什么要执行take(1)。在这本书的过程中,我看到这种情况发生了好几次。这里不需要take(1)take(1)将确保计时器

我在看电视

.retryWhen{中的错误
返回errors.enumerated().flatMap{(尝试,错误)->在
如果尝试次数>=最大尝试次数-1{
返回可观察错误(error)
}
返回可观察计时器(双精度(尝试+1),调度程序:
MainScheduler.instance)。获取(1)
}
}
计时器没有使用
周期
变量,因此它只触发一次,不会重复。那么,它为什么要执行
take(1)
。在这本书的过程中,我看到这种情况发生了好几次。

这里不需要
take(1)
take(1)
将确保计时器不会重复

可观察计时器是一个发出值的操作符。除非
period
参数仍然是
nil
,否则在这种情况下,将使用
TimerOneOffSink
TimerOneOffSink
发出元素,然后完成并处理

例如:

Observable<Int>
    .timer(3.0,
           scheduler: MainScheduler.instance)
    .take(10)
    .subscribe(
        onNext:      { print($0) },
        onCompleted: { print("Completed") },
        onDisposed:  { print("Disposed") }
    )
在咨询作者之一马林·托多罗夫(Marin Todorov)后,他确认这一定是疏忽


代码片段的整个思想是使用持续时间增加1秒的计时器在重试之间等待:结果是一个最大尝试次数的增量退避策略。

如果您没有
周期,那么它是不重复的。这难道不是不必要吗?@亲爱的,不是。所以教程很混乱。是吗?亲爱的,是的。在进行编辑之前,他们可能已经使用了
interval
,使用
take(1)
是有意义的。使用不重复的计时器使用
take(1)
没有错,只是没有必要。你在推特上联系过他?FWIW,额外的
take(1)
是关于
retryWhen
的几个例子。不是一个单身汉犯了那个错误
Observable<Int>
    .timer(3.0,
           scheduler: MainScheduler.instance)
    .take(10)
    .subscribe(
        onNext:      { print($0) },
        onCompleted: { print("Completed") },
        onDisposed:  { print("Disposed") }
    )
0
Completed
Disposed