2015-11-04 45 views
0

我在Swift中使用PromiseKit 3.0,我有一组承诺[Promise<Int>]。我想把所有成功的承诺都汇集成一个承诺。 Promise<[Int]>收集成功的承诺数组

whenjoin如果连一个都包含诺言拒绝,则拒绝。根据文档,我应该可以使用join,并且错误将包含所实现值的数组,但在Swift中,错误包含所有传入的promise,而不是实现的值。

任何帮助,将不胜感激。

回答

1

我现在看到我需要一个新的功能:

https://gist.github.com/dtartaglia/2b19e59beaf480535596

/** 
Waits on all provided promises. 

`any` waits on all provided promises, it rejects only if all of the promises rejected, otherwise it fulfills with values from the fulfilled promises. 

- Returns: A new promise that resolves once all the provided promises resolve. 
*/ 
public func any<T>(promises: [Promise<T>]) -> Promise<[T]> { 
    guard !promises.isEmpty else { return Promise<[T]>([]) } 
    return Promise<[T]> { fulfill, reject in 
     var values = [T]() 
     var countdown = promises.count 
     for promise in promises { 
      promise.then { value in 
       values.append(value) 
      } 
      .always { 
       --countdown 
       if countdown == 0 { 
        if values.isEmpty { 
         reject(AnyError.Any) 
        } 
        else { 
         fulfill(values) 
        } 
       } 
      } 
     } 
    } 
} 

public enum AnyError: ErrorType { 
    case Any 
}