收集一系列成功的承诺

Posted

技术标签:

【中文标题】收集一系列成功的承诺【英文标题】:Collect array of successful promises 【发布时间】:2015-11-04 15:54:12 【问题描述】:

我在 Swift 中使用 PromiseKit 3.0,并且我有一系列的 Promise [Promise<Int>]。我想将所有成功的 Promise 收集到一个 Promise 中。 Promise<[Int]>.

whenjoin 都拒绝,即使其中一个包含 promise 也拒绝。根据文档,我应该能够使用 join 并且错误将包含一个已实现值的数组,但在 Swift 中,该错误包含所有传入的承诺,而不是已实现的值。

任何帮助将不胜感激。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于收集一系列成功的承诺的主要内容,如果未能解决你的问题,请参考以下文章

如何按顺序执行一系列承诺?

如何从异步迭代器中产生一系列承诺?

如何为一系列承诺数组做promise.all?

如何遍历 node.js 中的一系列承诺?

如何重复一系列承诺中的步骤以及如何从失败的步骤中恢复?

ES6系列文章 Promise