首页 > 解决方案 > 来自 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”状态之前等待这个函数完全返回一个非空值?

谢谢!

标签: firebasefluttergoogle-cloud-firestore

解决方案


我想你正在寻找这个:

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 文档中的聚合查询分布式计数器


推荐阅读