簡體   English   中英

RxFeedback 示例問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM