Alamofire重试请求 - 被动方式

时间:2016-08-25 07:00:52

标签: swift alamofire rx-swift reactivex

我正在看那两个:

试图创建类似的东西,但没有Moya,使用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方法以及如何实现它?因为根据位置我可以获得不同的输入参数。

1 个答案:

答案 0 :(得分:1)

重试代码必须在第一次尝试之后进行,即rx_responseJSON所以现在设置方式的方式,它必须在它之间和之后的flatMap之间。