![](/img/trans.png)
[英]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.