Невозможно получить документы из пожарного магазина параллельно - PullRequest
0 голосов
/ 07 декабря 2018

Я использую 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 обещания никогда не будут выполнены.

Может кто-нибудь указать, почемуэто происходит?

...