我已经设置了一个点赞的分布式计数器,并希望在该分布式计数器中计算总点赞。
在我的“帖子”模型下,将计数器设置为“ count_shrads”的子集合,该子集合包括三个文档(1、2、3),每个文档都有一个“ count”字段。我想在flutter中创建一个函数,该函数返回给定文章的三个文档中每个文档的这些计数字段的总数。
Future getTotal(postID) async {
int counter;
Firestore.instance
.collection('post').document(postID).collection('count_shrads')
.snapshots()
.listen((data) =>
data.documents.forEach((doc) => counter += (doc["count"])));
print("The total is $counter");
return counter;
}
当前返回null。有人知道我如何返回汇总值吗?
使用reduce函数:
Future getTotal(postID) async {
int value;
Firestore.instance
.collection('post').document(postID).collection('count_shrads')
.snapshots()
.listen((data) =>
data.documents.reduce((value, element) => value + doc["count"])
);
return value;
}
答案 0 :(得分:0)
如果要使用异步调用的结果,则需要等待结果变为可用
Future getTotal(postID) async {
int counter;
await Firestore.instance // <<<== changed
.collection('post').document(postID).collection('count_shrads')
.snapshots()
.listen((data) =>
data.documents.forEach((doc) => counter += (doc["count"])));
print("The total is $counter");
return counter;
}
}
如果没有await
,return counter;
将立即执行,而当Firebase服务器的响应到达时,counter += ...
将在稍后执行。 await
确保仅在异步调用返回的Future
完成(执行完成或发生错误)之后执行以下代码