firebase - 数据何时在 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() 请求数据之前,数据实际上是“在”文档快照中还是未传输?
解决方案
当您调用get()
或时,数据会从数据库传输到您的应用程序onSnapshot()
。每个都DocumentSnapshot
包含您获取文档时的所有数据。调用document.data()
仅返回它已经拥有的数据的映射。
推荐阅读
- powershell - Get-SPWeb 无法找到具有 ID 或 URL 的对象
- swift - 除非滚动,否则 UICollectionViewCells 不会加载
- mongodb - $max 如何作用于对象数组?
- asp.net - 如何更新/生成数据库表模型?
- macos - AppleScript - 获取每个打开窗口的边界
- node.js - 如何从表单发布到 URL 并使用 Express 从中获取 JSON?
- sql-server - 用于删除当前和未来日期的 SQL 查询?
- unity3d - 如何旋转对象以沿矢量 Unity3D 指向
- python - 将数据添加到 CSV 文件的新列和第一行
- angular - 错误 TS2304:部署云功能 firebase 时找不到名称“元素”