无法并行从Firestore获取文档

时间:2018-12-07 10:10:10

标签: ios swift firebase promise google-cloud-firestore

我正在iOS应用中使用Firestore。

我正在尝试使用promises(PromiseKitAwaitKit)并行获取一些文档

我观察到,如果尝试并行获取大量文档,那么这些文档将永远不会被退回。

但是,如果我尝试并行获取少量文档,则会按预期返回文档。

我编写了以下扩展名,以便可以使用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承诺将永远无法实现。

有人能指出为什么会这样吗?

0 个答案:

没有答案