You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

35 lines
949 B

//
// Promise+Retry.swift
// then
//
// Created by Sacha Durand Saint Omer on 22/02/2017.
// Copyright © 2017 s4cha. All rights reserved.
//
import Foundation
extension Promise {
public func retry(_ nbOfTimes: UInt) -> Promise<T> {
guard nbOfTimes > 0 else {
return Promise.reject(PromiseError.retryInvalidInput)
}
let p = newLinkedPromise()
self.numberOfRetries = nbOfTimes
self.syncStateWithCallBacks(
success: { [weak self] t in
self?.numberOfRetries = 0
p.fulfill(t)
},
failure: { [weak self] e in
self?.numberOfRetries -= 1
if self?.numberOfRetries == 0 {
p.reject(e)
} else {
self?.resetState()
self?.start()
}
},
progress: p.setProgress)
return p
}
}