0

Swift で PromiseKit 3.0 を使用しており、 promises の配列があります[Promise<Int>]。成功する約束を一つにまとめたい。Promise<[Int]>.

どちらかが含まれるプロミスが拒否された場合は、両方whenとも拒否します。joinドキュメントによると、私は使用できるはずjoinで、エラーには満たされた値の配列が含まれますが、Swift では、満たされた値ではなく、渡されたすべての約束がエラーに含まれます。

どんな助けでも大歓迎です。

4

1 に答える 1

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
}
于 2015-11-04T16:38:53.400 に答える