首页 > 解决方案 > 数据何时在 Firestore 中实际传输?在文档快照中?或者直到 .data() 或 .get() 被调用?

问题描述

我正在尝试决定如何构建应用程序的权限。其中大部分归结为标题中的问题。具体来说,如果我打电话:

const tasks = db.collection('tasks').where('canRead', 'array-contains', firebase.auth().currentUser.uid).get()并检索一组文档快照,是为每个快照实际传输的数据,还是直到我遍历该数组时才传输的数据:

for(let taskSS of tasks.docs) { ...并最终调用 .data() let task = taskSS.data()

我问的原因是,如果我有一个包含大量用户的任务文档,这些用户可以获取并列出该任务,我不想在初次db.collection('tasks').where('canRead', 'array-contains', firebase.auth().currentUser.uid).get()调用时传输所有这些数据。

如果在我们调用 .data() 或 .get() 之前数据并未真正传输,那么我可以将所有任务数据放在 task.public 中,然后执行let task = taskSS.get('public').

有人知道实际数据何时传输并使用firestore放入内存吗?在您使用 .data() 或 .get() 请求数据之前,数据实际上是“在”文档快照中还是未传输?

标签: firebasegoogle-cloud-firestore

解决方案


当您调用get()或时,数据会从数据库传输到您的应用程序onSnapshot()。每个都DocumentSnapshot包含您获取文档时的所有数据。调用document.data()仅返回它已经拥有的数据的映射。


推荐阅读