diff --git a/Promises/Promise.swift b/Promises/Promise.swift index 4162633..452c10e 100644 --- a/Promises/Promise.swift +++ b/Promises/Promise.swift @@ -361,3 +361,13 @@ public func first(promises: [Promise]) -> Promise { public func first(promises: Promise...) -> Promise { return first(promises) } + +public func completed(promises: [Promise]) -> Promise { + return promise { resolve, reject in + when(promises).then { _ in + resolve() + }.error { _ in + resolve() + } + } +} diff --git a/PromisesTests/PromisesTests.swift b/PromisesTests/PromisesTests.swift index 3de2593..9c7a8cd 100644 --- a/PromisesTests/PromisesTests.swift +++ b/PromisesTests/PromisesTests.swift @@ -145,4 +145,25 @@ class PromisesTests: XCTestCase { XCTAssert(p.isFulfilled == true) } + + func testCompleted() { + let expectation = expectationWithDescription("promise completes") + + var promises: [Promise] = [] + + let p = promise() { () -> Int in + throw PromisesTestsError.TestError + } + promises.append(p) + + let p2 = fulfill(1) + promises.append(p2) + + completed(promises).then { _ in + expectation.fulfill() + } + + waitForExpectationsWithTimeout(3) { error in + } + } }