Firestore 中的 getDocuments() 和 snapshots() 有什么区别?

hyp*_*eta 5 dart firebase flutter google-cloud-firestore

我对这两者之间的区别有点困惑。我的理解是这getDocuments是一种Future,似乎根据查询获取整个文档。snapshots另一方面,while是一种 Stream 类型,如果我错了,请纠正我,我认为它代表查询的结果?我需要对这个问题进行更具体的解释。我将包含一些代码片段作为示例以进行更多说明

获取文档()

getUserById(String userId) async {
    return await _firestore.collection("users").where("userId", isEqualTo: userId).getDocuments();
}
Run Code Online (Sandbox Code Playgroud)

快照()

getUserById(String userId) async {
    return await _firestore.collection("users").where("userId", isEqualTo: userId).snapshots();
}
Run Code Online (Sandbox Code Playgroud)

那么有什么区别呢?

Fra*_*len 8

当您调用 时getDocuments(),Firestore 客户端会从服务器获取一次与查询匹配的文档。由于这可能需要一些时间,因此它会返回一个Future<QuerySnapshot>.

当您调用snapshots()Firestore 客户端时,它会获取文档,然后继续监视服务器上的数据库以查找影响查询的更改。因此,如果文档写入users影响您的查询的集合中,您的代码将被再次调用。所以这会返回一个QuerySnapshot.

在这两种情况下,整个查询的结果都在QuerySnapshot对象中。

我强烈建议阅读 Firestore 文档,了解一次性获取数据监听实时更新。虽然它们不包含 Flutter 示例,但其中的解释同样适用于 Flutter 库。