【问题标题】:Alamofire retry request - reactive wayAlamofire 重试请求 - 反应方式
【发布时间】:2016-08-25 07:00:52
【问题描述】:

我在看那两个:

并尝试使用 Alamofire + RxSwift 创建类似的东西,但没有 Moya。

首先显然我应该把它放在哪里,因为我的实现分为几个较小的部分。 首先,我有生成 reactive 请求的自定义方法:

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)
}

稍后被特定的Requests 便利类使用。例如我的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()
    }

}

因为事情看起来像我想知道放置retry 方法的正确位置是什么以及如何实现它?因为根据位置,我可以获得不同的输入参数。

【问题讨论】:

    标签: swift alamofire rx-swift reactivex


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 2017-08-10
      • 2018-10-28
      • 2019-06-27
      • 2017-05-11
      相关资源
      最近更新 更多