// // Async.swift // then // // Created by Sacha Durand Saint Omer on 13/03/2017. // Copyright © 2017 s4cha. All rights reserved. // import Foundation import Dispatch @discardableResult public func async(block:@escaping () throws -> T) -> Async { let p = Promise { resolve, reject in DispatchQueue(label: "then.async.queue", attributes: .concurrent).async { do { let t = try block() resolve(t) } catch { reject(error) } } } p.start() return p }