函数未返回任何数据,因为它尚未完成下载?

时间:2019-07-14 00:48:50

标签: swift multithreading firebase google-cloud-firestore synchronization

我创建了一个自定义类,该类为 Swift 5 ,用于处理云Firestore数据库的写入/读取过程。

“ get()”方法接收集合,文档ID和要检索的参数的名称。

应该返回数据(如果找到)

但是我发现它返回“ nil”,原因是“ getDocuments()”函数尚未完成运行,但是由于没有错误,该函数返回了“ nil”值。 / strong>

我试图将函数分成两个串行队列,但由于无法从队列中返回值而无法正常工作。

我试图运行一个无限循环,该循环不断检查“ getDocuments()”函数是否已完成,如果已经完成,它将返回该值。

import UIKit
import Foundation
import Firebase

class CloudFirestoreHandler {

    internal let db: Firestore?
    internal enum FIRESTORE_ERRORS: Error {
        case errorAddingDocument
        case errorUpdatingDocument
        case errorGettingDocument
        case internetNotAvailable
    }

    init() {
        db = Firestore.firestore()
    }

func get(collection: String, documentID: String, forKey: String) throws -> Any? {

        var error: Bool = false
        var returnValue: Any?

        db!.collection(collection).getDocuments() { (querySnapshot, err) in
            if err != nil {
                self.handleErrors()
                error = true
            } else {
                // GET USER NAME
                for document in querySnapshot!.documents {
                    if document.documentID == documentID {
                        returnValue = document.data()[forKey]
                        break
                    }
                }
            }
        }


        if !error {
           // returns nil because "error" is "false"
           // but "returnValue" does not have a value yet
           // It should only return when the process above has finished

           return returnValue
        } else {
           throw FIRESTORE_ERRORS.errorGettingDocument
        }
    }
}

我发现“ getDocuments()”函数是异步的。 这意味着我必须检测它何时完成,但是我无法想到任何方法。

0 个答案:

没有答案