我正在尝试使用此功能返回文档列表的长度:
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”状态之前如何等待该函数完全返回非null值吗?
谢谢!
答案 0 :(得分:2)
我认为您正在寻找这个:
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文档中的aggregation queries和distributed counters。