From acf7876f71de52c2958648a4b134c46abe0ef4ba Mon Sep 17 00:00:00 2001 From: Anton Popkov Date: Fri, 26 Oct 2018 16:10:21 +0300 Subject: [PATCH] Network error handling fix vol. 3 --- .../Alamofire/SessionManager+Extensions.swift | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift index 1bd994df..19929907 100644 --- a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift +++ b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift @@ -51,11 +51,11 @@ public extension Reactive where Base: SessionManager { -> Observable<(response: HTTPURLResponse, model: T)> { return apiRequest(requestParameters: requestParameters) - .takeOneAndCatchError() .flatMap { $0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder) - .catchErrorAndWrap(for: $0) + .catchErrorAndWrap(with: $0) } + .catchErrorAndWrap() } /// Method that executes request and serializes response into target object @@ -68,27 +68,20 @@ public extension Reactive where Base: SessionManager { -> Observable<(response: HTTPURLResponse, model: T)> { return apiRequest(requestParameters: requestParameters) - .takeOneAndCatchError() .flatMap { $0.rx.observableApiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder) - .catchErrorAndWrap(for: $0) + .catchErrorAndWrap(with: $0) } + .catchErrorAndWrap() } } -private extension ObservableType where E: DataRequest { - func takeOneAndCatchError() -> Observable { - return take(1) - .catchError { throw RequestError.network(error: $0, response: nil) } - } -} - private extension ObservableType { - func catchErrorAndWrap(for request: DataRequest) -> Observable { + func catchErrorAndWrap(with request: DataRequest? = nil) -> Observable { return catchError { let resultError: RequestError - let response = request.delegate.data + let response = request?.delegate.data switch $0 { case let requestError as RequestError: