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.

29 lines
556 B

  1. //
  2. // Await.swift
  3. // then
  4. //
  5. // Created by Sacha Durand Saint Omer on 13/03/2017.
  6. // Copyright © 2017 s4cha. All rights reserved.
  7. //
  8. import Foundation
  9. import Dispatch
  10. @discardableResult public func await<T>(_ promise: Promise<T>) throws -> T {
  11. var result: T!
  12. var error: Error?
  13. let group = DispatchGroup()
  14. group.enter()
  15. promise.then { t in
  16. result = t
  17. group.leave()
  18. }.onError { e in
  19. error = e
  20. group.leave()
  21. }
  22. group.wait()
  23. if let e = error {
  24. throw e
  25. }
  26. return result
  27. }