retry changes. add acceptable status codes to DefaultNetworkManager
This commit is contained in:
parent
042fac89cc
commit
e5aff4e1e9
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
## 0.1.1
|
||||
|
||||
- **Add**: `acceptableStatusCodes` property in `DefaultNetworkService`.
|
||||
- **Add**: `retry(retryLimit:canRetryClosure:)` to `Observable` extension.
|
||||
- **Removed**: `retryWithinErrors` method from `Observable` extension.
|
||||
- **Update**: LeadKit to `0.6.x` version
|
||||
- **Removed**: `ConnectionError`. (Replaced by `LeadKit.RequestError`)
|
||||
- **Removed**: `handleConnectionErrors` from Observable+Extensions
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ PODS:
|
|||
- IDZSwiftCommonCrypto (0.10.0)
|
||||
- InputMask (3.0.0)
|
||||
- KeychainAccess (3.1.0)
|
||||
- LeadKit (0.6.1):
|
||||
- LeadKit/Core (= 0.6.1)
|
||||
- LeadKit/Core (0.6.1):
|
||||
- LeadKit (0.6.5):
|
||||
- LeadKit/Core (= 0.6.5)
|
||||
- LeadKit/Core (0.6.5):
|
||||
- CocoaLumberjack/Swift (~> 3.3.0)
|
||||
- ObjectMapper (~> 3.0.0)
|
||||
- RxAlamofire (= 4.0.0)
|
||||
|
|
@ -16,7 +16,7 @@ PODS:
|
|||
- RxSwift (= 4.0.0)
|
||||
- TableKit (~> 2.5.0)
|
||||
- UIScrollView-InfiniteScroll (~> 1.0.0)
|
||||
- LeadKit/Core-iOS-Extension (0.6.1):
|
||||
- LeadKit/Core-iOS-Extension (0.6.5):
|
||||
- CocoaLumberjack/Swift (~> 3.3.0)
|
||||
- ObjectMapper (~> 3.0.0)
|
||||
- RxAlamofire (= 4.0.0)
|
||||
|
|
@ -49,7 +49,7 @@ SPEC CHECKSUMS:
|
|||
IDZSwiftCommonCrypto: 4eef2c46e262dfbcbc1fd76365e066336680ad7d
|
||||
InputMask: 37c273bde6705187d80cf0b4240cb42ea92096c3
|
||||
KeychainAccess: 94c5540b32eabf7bc32bfb976a268e8ea05fd6da
|
||||
LeadKit: 13d8e4d8f9484e9fd77b23da6f585eb67b1886c3
|
||||
LeadKit: 583c724f25852e40eebad8af5a945e101c282fde
|
||||
ObjectMapper: 92230db59bf8f341a5c3a3cf0b9fbdde3cf0d87f
|
||||
RxAlamofire: 6ea579ac53bf14cb4bc7049a3866e5a769989b1d
|
||||
RxCocoa: d62846ca96495d862fa4c59ea7d87e5031d7340e
|
||||
|
|
|
|||
|
|
@ -29,23 +29,23 @@ public typealias VoidBlock = () -> Void
|
|||
|
||||
public extension Observable {
|
||||
|
||||
/**
|
||||
Allow to configure request to restart if error occured
|
||||
|
||||
- parameters:
|
||||
- errorTypes: list of error types, which triggers request restart
|
||||
- retryLimit: how many times request can restarts
|
||||
*/
|
||||
func retryWithinErrors(_ errorTypes: [Error.Type] = [RequestError.self],
|
||||
retryLimit: UInt = DefaultNetworkService.retryLimit)
|
||||
-> Observable<Observable.E> {
|
||||
/// A closure that checks for "retryable" error
|
||||
typealias CanRetryClosure = (Error) -> Bool
|
||||
|
||||
/// Allow to configure request to restart if error occured
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - retryLimit: how many times request can restarts
|
||||
/// - canRetryClosure: a closure that checks for "retryable" error
|
||||
/// - Returns: An observable sequence producing the elements of the given sequence repeatedly
|
||||
/// until it terminates successfully or is notified to error or complete.
|
||||
func retry(retryLimit: UInt = DefaultNetworkService.retryLimit,
|
||||
canRetryClosure: @escaping CanRetryClosure) -> Observable<Observable.E> {
|
||||
|
||||
return observeOn(CurrentThreadScheduler.instance)
|
||||
.retryWhen { errors -> Observable<Observable.E> in
|
||||
return errors.enumerated().flatMap { attempt, error -> Observable<Observable.E> in
|
||||
let canRetry = errorTypes.contains { type(of: error) == $0 }
|
||||
|
||||
return (canRetry && attempt < retryLimit - 1) ? self : .error(error)
|
||||
.retryWhen { errorsObservable -> Observable<Observable.E> in
|
||||
return errorsObservable.enumerated().flatMap {
|
||||
(canRetryClosure($1) && $0 < retryLimit - 1) ? self : .error($1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,8 +43,13 @@ open class DefaultNetworkService: NetworkService {
|
|||
return 20.0
|
||||
}
|
||||
|
||||
public override init(sessionManager: SessionManager) {
|
||||
super.init(sessionManager: sessionManager)
|
||||
/// The default acceptable range 200…299
|
||||
open var acceptableStatusCodes: [Int] {
|
||||
return Alamofire.SessionManager.defaultAcceptableStatusCodes
|
||||
}
|
||||
|
||||
public init(sessionManager: SessionManager) {
|
||||
super.init(sessionManager: sessionManager, acceptableStatusCodes: acceptableStatusCodes)
|
||||
|
||||
// Fatal error: `drive*` family of methods can be only called from `MainThread`
|
||||
DispatchQueue.main.async {
|
||||
|
|
|
|||
Loading…
Reference in New Issue