【问题标题】:Get data from Firestore document and append to array从 Firestore 文档中获取数据并附加到数组
【发布时间】:2020-05-25 06:47:53
【问题描述】:

这里是firestore,里面有一个由ingID组成的成分集合,每个ingID有4个字段

image of my firestores

我有 [String] 的 ingID 像这样:["ing1", "ing2", ...] 调用 byDeptIngredientID
我想获取每个 ingID 的 departmentEN 所以我在 viewController 中有这段代码:

for id in byDeptIngredientID {
    print("start-function")
    GroceryAPI().getIngredientDept(ingID: id)
    print("finish-function")
}

然后我在另一个文件调用 GroceryAPI 中有这段代码。这就是我获得 departmentEN 字段的方式:

func getIngredientDept(ingID: String) {
     var byDeptIngredientDept = [String]()
     let ingredientList = Firestore.firestore().collection("ingredients").document(ingID)

     ingredientList.getDocument { (document, err) in
        print("appending...")
        self.deptIngredient.append(document!.get("departmentEN") as! String)
     }
     print("deptIngredient => \(self.deptIngredient)")
}

如您所见,我将 departmentEN 附加到 deptIngredient 中,但是当我之后打印出来时,结果只是空 [ ]。结果如下:

start-function
deptIngredient => []
finish-function
appending...
appending...
appending...

所以它只是跳过 getDocument 做其他事情然后回来做最后?可能是某种异步问题?但我希望 deptIngredient 像 ["dept1", "dept2", ...] 以供进一步使用。

知道如何解决这个问题吗?提前谢谢你。

PS。我已经尝试了 DispatchGroup 和 DispatchQueue,但没有运气。

【问题讨论】:

    标签: ios swift google-cloud-firestore


    【解决方案1】:

    请试试下面的代码

    let docRef = Firestore.firestore().collection("ingredients").document(ingID)
    
    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
           let data = document.data()
           let dataDescription = data.map(String.init(describing:)) ?? "nil"
           print("Document data: \(dataDescription)")
    
           let ingredient = data["departmentEN"] as? String ?? ""
           self.deptIngredient.append(ingredient)
    
        } else {
            print("Document does not exist")
        }
    }
    

    【讨论】:

    • 还是一样的结果,比如:enter for id loop --> finish for id loop --> 文档数据:.....
    • 将 byDeptIngredientDept 变量移到 func getIngredientDept 之外。
    猜你喜欢
    • 2020-04-30
    • 2018-07-30
    • 2020-12-03
    • 1970-01-01
    • 2020-02-25
    • 2020-09-07
    • 2020-11-30
    • 2018-10-14
    • 2023-01-01
    相关资源
    最近更新 更多