从Firestore addSnapshotListener

时间:2017-10-29 03:01:15

标签: ios swift4 google-cloud-firestore

过去几周我一直在iOS Swift 4中使用firestore构建一个简单的演示应用程序作为领域的替代品。它有一个简单的表视图,可以在用户执行CRUD操作时填充并保持设备同步

在我的应用中 - 我在查询中添加了一个snapshotlistener

self.changeListener = query.addSnapshotListener { [weak self](queryResultSnapshot, error) in
    //process document changes
}

在回调中 - 我已根据queryResultSnapshot.changes中的DocumentChangeType处理添加的,更新的,已删除的更改。

主要问题是我使用

删除文档
reference.delete(completion:)

删除成功后 - 我在querySnapshotListener中看到以下事件。

//following is a debug message printed in delete function to correlate document ID
Will delete reference: i0W76CZP5X41vRp6BmzY     

//following 3 are printed in the snapshot change listener
Deleted reference: i0W76CZP5X41vRp6BmzY, Source of change: Server
Created reference: i0W76CZP5X41vRp6BmzY, Source of change: Server
Deleted reference: i0W76CZP5X41vRp6BmzY, Source of change: Server

在上面的打印中 - 我正在使用挂起写入标志来打印更改源。我们可以看到 - 当我执行删除操作时 - 我收到删除通知,然后立即创建/删除相同的文档引用。

有没有其他人看到这种行为?直到几天后我才看到这种行为 - 所以我很好奇是否有需要处理的事情?

提前致谢

1 个答案:

答案 0 :(得分:0)

使用db transaction进行删除,不会发生此问题。例如:

Firestore.firestore().runTransaction({(transaction, error) -> Any? in

    return transaction.deleteDocument(docReference)

}) { [weak self](object, err) in
    // do something when operation is done
}