在 PromiseKit 上链接承诺
Chaining promises on PromiseKit
我正在尝试链接一些需要在 returning 之前解决的承诺。
在我的例子中,对于 databaseResult 的每个元素,我需要使用 return 承诺的方法获取一些数据。
一旦我获取了数组中每个元素的数据,我就需要 return 到调用方法。
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 的经验很少,文档/示例也很少,所以我不知道我在这里遗漏了什么。
在向库开发人员寻求帮助后,我发现必须使用 "when" 来等待一系列的承诺完成。
那么问题的解就变成了
return when(databaseResults.map{ (dbresult : MatchRealmModel) in
return DataProvider.getUserProfileWithUserId((dbresult.partnerUserProfile?.userId)!).then { model in
return MatchModel(realmModel: dbresult, partnerProfile: model)
}
})
我还发现使用空数组作为参数的 when()
调用会导致此问题。
我正在尝试链接一些需要在 returning 之前解决的承诺。
在我的例子中,对于 databaseResult 的每个元素,我需要使用 return 承诺的方法获取一些数据。
一旦我获取了数组中每个元素的数据,我就需要 return 到调用方法。
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 的经验很少,文档/示例也很少,所以我不知道我在这里遗漏了什么。
在向库开发人员寻求帮助后,我发现必须使用 "when" 来等待一系列的承诺完成。 那么问题的解就变成了
return when(databaseResults.map{ (dbresult : MatchRealmModel) in
return DataProvider.getUserProfileWithUserId((dbresult.partnerUserProfile?.userId)!).then { model in
return MatchModel(realmModel: dbresult, partnerProfile: model)
}
})
我还发现使用空数组作为参数的 when()
调用会导致此问题。