【问题标题】:Chaining promises on PromiseKit在 PromiseKit 上链接承诺
【发布时间】:2015-12-14 13:37:21
【问题描述】:

我正在尝试链接一些需要在返回之前解决的承诺。

在我的例子中,对于 databaseResult 的每个元素,我需要使用返回承诺的方法获取一些数据。

一旦我获取了数组中每个元素的数据,我需要返回到调用方法。

var toReturn = [MatchModel]()
//get my array of data
let databaseResults = MatchDatabaseManager.getMatchList();

    //not sure what I'm doing
    var promise = dispatch_promise{ 0 }
    if(databaseResults.count > 0) {
        return Promise { fulfill, reject in

            for index in 0..<databaseResults.count {
                print(index)
                promise = promise.then { y -> Promise<Int> in
                    //Fetch the data I need ...

                  DataProvider.getUserProfileWithUserId(
                  (databaseResults[y].partnerUserProfile?.userId)!)
                  .then {(model) in {
                  //and use it to create the data I need to return
                        toReturn.append(MatchModel(realmModel:            
                         databaseResults[y], partnerProfile: model))

                        }
                    }

                    return dispatch_promise { index }
                }
            }
            //Once all the promises are fulfilled, toReturn contains the data I need and I can return it
            promise.then{ x in {
                fulfill(toReturn)
                }
            }
        }
    }

如果我运行它,我会得到

 PromiseKit: Pending Promise deallocated! This is usually a bug

我对 PromiseKit 的经验很少,文档/示例也很少,所以我不知道我在这里缺少什么。

【问题讨论】:

    标签: ios swift promisekit


    【解决方案1】:

    在向库开发人员寻求帮助后,我发现必须使用“何时”来等待一系列承诺完成。 那么问题的解决方案就变成了

    return when(databaseResults.map{ (dbresult : MatchRealmModel) in
                return DataProvider.getUserProfileWithUserId((dbresult.partnerUserProfile?.userId)!).then { model in
                    return MatchModel(realmModel: dbresult, partnerProfile: model)
                }
                })
    

    【讨论】:

      【解决方案2】:

      我还发现以空数组作为参数的when() 调用可能会导致此问题。

      【讨论】:

        猜你喜欢
        • 2016-02-08
        • 2016-01-06
        • 2015-10-10
        • 2015-09-05
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多