Я использую Firestore в приложении для iOS.
Я пытаюсь получить некоторое количество документов параллельно, используя обещания ( PromiseKit и AwaitKit )
Я заметил, что если я пытаюсь получить большое количество документов параллельно, то документы никогда не возвращаются.
Однако, если я пытаюсь получить небольшое количество документов параллельно,затем документы возвращаются, как и ожидалось.
Я написал следующее расширение, чтобы я мог использовать обещание вместо обратного вызова для извлечения документов.
extension DocumentReference {
func getDocumentPromise() -> Promise<DocumentSnapshot?> {
return Promise { seal in
getDocument { (document, error) in
seal.resolve(document, error)
}
}
}
}
Следующий код - функция Iиспользовать для извлечения документов
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
обещания никогда не будут выполнены.
Может кто-нибудь указать, почемуэто происходит?