session-ios/SessionUtilitiesKit/PromiseKit/Promise+Retrying.swift

15 lines
507 B
Swift

import PromiseKit
/// Retry the promise constructed in `body` up to `maxRetryCount` times.
public func attempt<T>(maxRetryCount: UInt, recoveringOn queue: DispatchQueue, body: @escaping () -> Promise<T>) -> Promise<T> {
var retryCount = 0
func attempt() -> Promise<T> {
return body().recover(on: queue) { error -> Promise<T> in
guard retryCount < maxRetryCount else { throw error }
retryCount += 1
return attempt()
}
}
return attempt()
}