[英]Swift Package Manager issues with unversioned Packages (example: firebase-ios-sdk)
[英]RxFeedback Example issues
extension URLSession {
fileprivate func loadRepositories(resource: URL) -> Observable<SearchRepositoriesResponse> {
return self
.rx.response(request: URLRequest(url: resource))
.retry(3)
.map(Repository.parse)
.retryWhen { $0.delay(1.0, scheduler: MainScheduler.instance) }
}
}
为什么要在最后一步使用retryWhen { $0.delay(1.0, scheduler: MainScheduler.instance) }
? 如果我不使用它会怎样?
如果Repository.parse
返回错误,则代码示例中的retryWhen
错误retryWhen
延迟 1 秒。 恕我直言,在这种情况下使用retryWhen
运算符有点误导,因为没有重试发生。 它只会延迟错误。
RxFeedback 的 github 页面上的示例代码已更新为新版本,该版本实际上会重试,直到达到最大尝试次数:
extension URLSession {
fileprivate func loadRepositories(resource: URL) -> Observable<SearchRepositoriesResponse> {
// The maximum number of attempts to retry before launch the error
let maxAttempts = 4
return self
.rx
.response(request: URLRequest(url: resource))
.retry(3)
.map(Repository.parse)
.retryWhen { errorTrigger in
return errorTrigger.flatMapWithIndex { (error, attempt) -> Observable<Int> in
if attempt >= maxAttempts - 1 {
return Observable.error(error)
}
return Observable<Int>
.timer(Double(attempt + 1), scheduler: MainScheduler.instance).take(1)
}
}
}
}
现在,当Repository.parse
返回错误时,当未达到最大尝试次数时, retryWhen
会导致重试。 重试有一个延迟,每次尝试都会变得更长。 当达到最大尝试次数时,它会发出错误并以错误结束主序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.