我正在iOS应用中使用Firestore。
我正在尝试使用promises(PromiseKit和AwaitKit)并行获取一些文档
我观察到,如果尝试并行获取大量文档,那么这些文档将永远不会被退回。
但是,如果我尝试并行获取少量文档,则会按预期返回文档。
我编写了以下扩展名,以便可以使用promise而不是回调来获取文档。
extension DocumentReference {
func getDocumentPromise() -> Promise<DocumentSnapshot?> {
return Promise { seal in
getDocument { (document, error) in
seal.resolve(document, error)
}
}
}
}
以下代码是我用来提取文档的功能
static func fetchDocAndPerformAction(docRef: DocumentReference) -> Promise<Void> {
return async {
let snapshot = try await(docRef.getDocumentPromise())
performAction(snapshot: snapshot)
}
}
以下代码是我尝试并行获取文档的功能
static let NUMBER_OF_PARALLEL_GET_REQUESTS = 5
static func fetchParallel(docRefs: [DocumentReference]) -> Promise<Void> {
return async {
var promises = [Promise<Void>]()
docRefs.forEach { docRef in
promises.append(fetchDocAndPerformAction(docRef: docRef))
if promises.count >= NUMBER_OF_PARALLEL_GET_REQUESTS {
try await(when(fulfilled: promises))
promises.removeAll()
}
}
try await(when(fulfilled: promises))
}
}
对于一些较低的NUMBER_OF_PARALLEL_GET_REQUESTS值,getDocumentPromise
承诺会按预期实现。
对于一些更高的NUMBER_OF_PARALLEL_GET_REQUESTS值,getDocumentPromise
承诺将永远无法实现。
有人能指出为什么会这样吗?