[英]How to retry a request in Moya with RxSwift?
我對 RxSwift 還是很陌生,我正在使用 Moya 和 RxSwift 在我的應用程序中建立網絡。 對於給定的 ProviderType,我有以下 function 用於每個請求。
open func request(for target: ProviderType) -> Observable<Response> {
return provider.rx.request(target)
.filterSuccessfulStatusCodes()
.asObservable()
.catchError { [weak self] error in
guard let self = self else {
return Observable.error(error)
}
return Observable.error(self.handleError(with: error))
}
}
這工作得很好,但現在我想在請求失敗並獲取刷新令牌后重試請求,狀態碼為 401。 我在 GitHub 問題上找到了此評論,該評論講述了如何實現它,但我仍然對它在我的案例中的工作方式感到困惑(評論未提供與刷新令牌機制如何工作相關的上下文)。
我寫了一篇關於遇到無效令牌時如何處理重試的文章。 這篇文章更深入,但 TLDR 是您需要使用retryWhen
運算符而不是catchError
。
通過使用retryWhen
您可以偵聽適當的錯誤,並在 401 進入時嘗試刷新令牌。如果您獲得新令牌,那么只需從閉包的 Observable 發出一個值即可。 如果刷新令牌失敗,則簡單地發出錯誤並說明原因。
此外,在 stream 的開頭,您需要一些插入刷新令牌的方法。
https://medium.com/@danielt1263/retrying-a-network-request-despite-have-an-invalid-token-b8b89340d29
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.