ReactiveSwift:最多重试 n 次,然后执行一些代码
ReactiveSwift: Retry up to n times, then execute some code
考虑下面的代码
func test() -> SignalProducer<String, Error> {
return SignalProducer<String, Error> { observer, _ in
...
}
}
test()
.on(value: { s in
print(s)
})
.retry(upTo: 2)
.start()
}
是否有重试 n 次的内置方法,然后(如果所有尝试均失败)执行一些回调?
当然可以引入一个本地计数器并统计.on(failed: _)
中的失败次数,然后在计数器等于n+1时做一些事情,但是还有其他方法吗?
retry(upTo:)
在达到重试限制后传递错误,因此您可以使用允许您处理值和错误的 start
方法之一。例如,使用 startWithResult
你可以这样做(注意我没有测试这段代码,但它应该给你想法):
test()
.retry(upTo: 2)
.startWithResult { result in
switch result {
case let .success(value):
print(value)
case let .failed(error):
// handle error here
}
}
考虑下面的代码
func test() -> SignalProducer<String, Error> {
return SignalProducer<String, Error> { observer, _ in
...
}
}
test()
.on(value: { s in
print(s)
})
.retry(upTo: 2)
.start()
}
是否有重试 n 次的内置方法,然后(如果所有尝试均失败)执行一些回调?
当然可以引入一个本地计数器并统计.on(failed: _)
中的失败次数,然后在计数器等于n+1时做一些事情,但是还有其他方法吗?
retry(upTo:)
在达到重试限制后传递错误,因此您可以使用允许您处理值和错误的 start
方法之一。例如,使用 startWithResult
你可以这样做(注意我没有测试这段代码,但它应该给你想法):
test()
.retry(upTo: 2)
.startWithResult { result in
switch result {
case let .success(value):
print(value)
case let .failed(error):
// handle error here
}
}