2
我看着那两个:Alamofire重试请求 - 反应方式
- http://sapandiwakar.in/refresh-oauth-tokens-using-moya-rxswift/
- Using retryWhen to update tokens based on http error code
,并试图创造similiar的事情,但没有莫亚,使用Alamofire + RxSwift 。
首先显然我应该坚持这个,因为我的实现分为几个较小的部分。所有的 首先我有我的生成反应请求自定义的方法:
static func rx_request<T>(requestConvertible: URLRequestConvertible, completion: (Request) -> Observable<T>) -> Observable<T> {
let manager: Manager = Manager.sharedInstance
return manager
.rx_request { manager -> Request in
return Alamofire.request(requestConvertible)
}
.flatMap { request -> Observable<T> in
return completion(request)
}
.shareReplay(1)
}
这就是后来被特定Request
的便利类。比如我UserRequests
有这个私有扩展,从它的方法提取一些常用代码:
private extension Request {
func rx_userRequest() -> Observable<User> {
return self
.validate()
.rx_responseJSON()
.flatMap{ (request, json) -> Observable<User> in
guard
let dict = json as? [ String: AnyObject ],
let parsedUser: User = try? Unbox(dict) else {
return Observable.error(RequestError.ParsingError)
}
return Observable.just(parsedUser)
}
.rx_storeCredentials()
}
}
因为事情怎么看起来像我不知道whare是在正确地方放retry
方法,以及如何实现它?因为根据位置我可以得到不同的输入参数。