firebase - 来自 Firebase 的文档的颤振返回长度
问题描述
我试图用这个函数返回一个文档列表的长度:
Future totalLikes(postID) async {
var respectsQuery = Firestore.instance
.collection('respects')
.where('postID', isEqualTo: postID);
respectsQuery.getDocuments().then((data) {
var totalEquals = data.documents.length;
return totalEquals;
});
}
我在 void init 状态下初始化它(使用另一个函数调用:
void initState() {
totalLikes(postID).then((result) {
setState(() {
_totalRespects = result;
});
});
}
但是,当它运行时,它最初会返回一个空值,因为它没有时间完全完成。我曾尝试在 Future 函数中的 Firestore 调用之前发出“等待”,但得到“仅等待期货”的编译错误。
谁能帮我理解如何在设置“_totalRespsects”状态之前等待这个函数完全返回一个非空值?
谢谢!
解决方案
我想你正在寻找这个:
Future totalLikes(postID) async {
var respectsQuery = Firestore.instance
.collection('respects')
.where('postID', isEqualTo: postID);
var querySnapshot = await respectsQuery.getDocuments();
var totalEquals = querySnapshot.documents.length;
return totalEquals;
}
请注意,这会加载所有文档,只是为了确定文档的数量,这非常浪费(尤其是当您获得更多文档时)。考虑保留一个文档,您将在其中维护计数作为一个字段,这样您只需阅读一个文档即可获得计数。请参阅Firestore 文档中的聚合查询和分布式计数器。
推荐阅读
- common-lisp - 通用 lisp 宏不调用函数
- php - “WISO mein Büro” API 不起作用,或者是我的错
- python - 从 slimxmpp 传递到 slixmpp AttributeError: '_asyncio.Future' 对象没有属性 'find_all'
- javascript - 使用 less.js 和 webpack 将 Font Awesome 加载为框
- xaml - 自定义模型作为 XAML 中的通用类型参数
- javascript - 在节点中 - 我如何修改此代码以便它通过管道传输到新的可读流
- azure - 如何在 Azure 上禁用 SSL
- swiftui - 在不使用导航链接的情况下获取 SwiftUI 列表中的选定项目
- vb.net - 在没有源代码的情况下更新 VB.NET EXE 上的 SQL Server 连接字符串
- javascript - 页面检查器上的实际设备和设备预览