SnapshotListener在updateData之后无法获取whereField文档

时间:2019-06-07 14:21:46

标签: ios swift firebase google-cloud-firestore

我确切地知道正在发生什么,但是我无法解决它。在我看来,这就像:

  1. 从firestore数据库中获取文档,其中字段是某个字符串 db.collection("Connections").whereField("UID", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser").addSnapshotListener { (querySnap, error) in
  2. 我要存储let thisStatus: String = data?["status"] as! String,然后有一个switch语句,该语句根据当前状态执行任务。

  3. 如果有状态为 waitingForUser 用户ID ,我需要将状态更新为 onGoing

    let document = querySnap?.documents.first document?.reference.updateData(["status": "onGoing"], completion: { (error) in

我需要快照侦听器,因为我将多次更改状态。

我遇到的问题是它第一次成功运行,但是在第3步之后转到第1步,并且由于条件为false,因为状态不再为 waitingForUser onGoing ,由于没有data?["status"],因此该程序将引发致命错误。要使这项工作有效,我该怎么做?我需要侦听器,并且需要多次更改状态。

这是已更新的完整代码块:

    db.collection("Connection").whereField("UID2", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser2").addSnapshotListener { (querySnap, error) in
        if let error = error {
            print("Error: \(error)")
        } else {

            let data = querySnap?.documents.first?.data()

            guard let thisStatus: String = data?["status"] as! String 
            else { return }

            switch thisStatus {
            case "waitingForUser2":
                //Update the status to onGoing
                let document = querySnap?.documents.first

                document?.reference.updateData([
                                "status": "onGoing"
                                ], completion: { (error) in

                                    print("Status is now on going")
                })

            case "connectionMade":
                print("it's connection made")
            default:
                print("DEFAULT is ON")
            }
        }

0 个答案:

没有答案