首页 > 解决方案 > 通过单个函数获取多个文档

问题描述

我有一个接受 id 列表的函数,并且应该获取所有具有这些 id 的文档,然后返回一个List<Map<String, dynamic>>. 我遇到的第一个问题是 Flutter 的 Firestore 没有在单个网络调用中从集合中获取多个文档的功能。(我在这里遗漏了什么吗?)

所以,我在 id 列表上运行一个 forEach 循环,并将我得到的数据添加到一个空列表中,如下所示:

interestIds.forEarch((id) {
  _db.collection('interests').document(id).get().then((DocumentSnapshot snap) {
    result.add(snap.data);
   }
 });
return result;

正如您可能已经猜到的那样,这并没有真正起作用,因为在return获取所有文档之前执行语句。我该如何解决这个问题?

如评论中所述更新代码:

  Future<List<Map<String, dynamic>>> getAllInterestsOfUser(
      List<String> interestIds) async {
    //Returns list of all intrests objects given a list of interestIds
    List<Map<String, dynamic>> result = List();

    await interestIds.forEach((id) {
      _db
          .collection('interests')
          .document(id)
          .get()
          .then((DocumentSnapshot snap) {
        print('Fetched: ' + snap.data.toString());
        result.add(snap.data);
      });
    });
    print('Interests: ' + result.toString());
    return result;
  }

应用程序输出:

I/flutter (12578): Interests: []
I/flutter (12578): Function Call: []
I/flutter (12578): Fetched: {conversationId: -LjS54Q0c7wcQqdwePT6, 49wotilxfSRbADygh7kt3TSscnz1: {//moredata}

标签: flutterdartgoogle-cloud-firestore

解决方案


推荐阅读