簡體   English   中英

如何使用 RxSwift 在 Moya 中重試請求?

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

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