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.
|
|
// // Promise+Delay.swift // then // // Created by Sacha Durand Saint Omer on 09/08/2017. // Copyright © 2017 s4cha. All rights reserved. //
import Foundation import Dispatch
extension Promise { public func delay(_ time: TimeInterval) -> Promise<T> { let p = newLinkedPromise() syncStateWithCallBacks( success: { t in Promises.callBackOnCallingQueueIn(time: time) { p.fulfill(t) } }, failure: p.reject, progress: p.setProgress) return p } }
extension Promises { public static func delay(_ time: TimeInterval) -> Promise<Void> { return Promise { (resolve: @escaping (() -> Void), _: @escaping ((Error) -> Void)) in callBackOnCallingQueueIn(time: time, block: resolve) } } }
extension Promises {
static func callBackOnCallingQueueIn(time: TimeInterval, block: @escaping () -> Void) { if let callingQueue = OperationQueue.current?.underlyingQueue { DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).asyncAfter(deadline: .now() + time) { callingQueue.async { block() } } } else { DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + time) { block() } } } }
|