【发布时间】:2021-12-14 08:19:33
【问题描述】:
在我获得任何请求的第一个 401 状态代码后,我需要自动重试请求的帮助。我正在使用 RxSwift 和 Alamofire,所以调用看起来像这样:
public func getSomeEndpointInfo() -> Observable<PKKInfo> {
return Observable.create({ observer in
let request = AF.request(Router.info)
request
.responseDecodable(of: Info.self) { response in
print("response: \(response)")
if response.response?.statusCode == 401 {
observer.onError(NetworkError.unauthorized)
}
guard let decodedItems = response.value else {
observer.onError(NetworkError.invalidJSON)
return
}
observer.onNext(decodedItems)
observer.onCompleted()
}
return Disposables.create()
})
}
现在在某些服务中,我有以下代码:
service.getSomeEndpointInfo()
.observe(on: MainScheduler.instance)
.subscribe { [unowned self] info in
self._state.accept(.loaded)
} onError: { [unowned self] error in
print("---> Error")
self.sessionManager
.renewToken()
.observe(on: MainScheduler.instance)
.subscribe { token in
print("---> recieved new token")
self.service.getSomeEndpointInfo()
} onError: { error in
print("---> error generating token")
}.disposed(by: self.disposeBag)
}.disposed(by: disposeBag)
使用此代码可以工作,但我必须在每个请求上调用更新令牌并将其嵌入到错误订阅中,这感觉不太好。如果您有其他建议,我会在 401 上以某种方式重试请求并在此之前触发更新令牌,我将不胜感激。
【问题讨论】:
标签: ios swift networking alamofire rx-swift