Chr*_*ris 0 promise ios firebase swift promisekit
使用Swift,我PromiseKit第一次尝试将 Promise 合并到我的代码中,并且在语法上难以理解如何使其工作。
我的目标是将Firebase数据请求流水线化,并在所有返回的数据满足附加数组后执行另一种方法。似乎promise已解决并在使用数据设置数组之前运行最终方法。我相信我应该使用“when”,但不可否认的是理解文档有困难。
缩写,相关代码如下:
getPosts(ids).done {
runningFinalMethod(self.arr)
}
func getPosts(_ ids: [String]) -> Promise<Void> {
return Promise { seal in
for id in ids {
db.collection("data").whereField("id", isEqualTo: id).getDocuments(completion: { (dataForId, error) in
appendData(dataForId)
})
}
seal.fulfill(())
}
}
func appendData(_ dataForId: [data]) {
arr.append(contentsOf: dataForId)
}
Run Code Online (Sandbox Code Playgroud)
最好thenMap在异步映射多个值的情况下使用。这是您如何实现这一目标
func getPosts(_ ids: [String]) -> Promise<Void> {
return Promise.value(ids).thenMap { id in
Promise<data> { resolver in
db.collection("data").whereField("id", isEqualTo: id).getDocuments { dataForId, error in
guard let error = error else { resolver.fulfill(dataForId) }
resolver.reject(error)
}
}
}
.done { allDataForIds in
self.arr = allDataForIds
}
.catch { error in
// handle error
}
}
Run Code Online (Sandbox Code Playgroud)
thenMap允许您映射单个值,然后使用Promise. 然后,您可以使用done方法收集所有值,该方法具有来自每个集合承诺的所有值。顺便说一下,done方法本身返回Promise<Void>,你可以简单地在最后返回它。
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |