无法从 firebase Stream 查询返回对象列表

Posted

技术标签:

【中文标题】无法从 firebase Stream 查询返回对象列表【英文标题】:Unable to return list of object from firebase Stream query 【发布时间】:2020-12-07 12:59:40 【问题描述】:

我正在做一个 firebase 查询,它必须将对象列表作为流返回。因此,为了实现这一目标,我使用 Async* 等待我的循环 for 完成,然后再继续该过程。 但问题是,我的函数在If 条件下停止并且没有进入他的for 循环并且我的函数没有返回任何内容。 欢迎您的帮助。

这是我的代码

Stream<List<InfoCompagnie>> fetchCompanies(
    String depart, String arrivee, String jour, int place) async* 
  var q = await db.collection('DISPONIBILITE').snapshots();
  await for (var q1 in q) 
    for (var compagnies in q1.documents) 
      var NomCompagnie = compagnies.data[firstCaseDate];
      for (var compagnie in NomCompagnie) 
        await for (var q2 in qq) 
          if (q2.documents.isNotEmpty) 
            //Making condition here
            for (var data in q2.documents) 
              await compagnieList
                  .add(infoCompagnie.value); //add Object here into list
             
            yield compagnieList; //return stream data here
          //Function stopped here
        
      
    
  

【问题讨论】:

如果您删除了if 语句,您的代码可以正常工作吗? No @J.A.Hernández 它给我带来了一个错误,因为我们无法从空文档中迭代。 你不需要等待流,只需要等待。事实上,你可能根本不需要在这里等待 是 @lenz 删除 await 关键字后它起作用了。谢谢 谢谢@lenz 这很有帮助。 【参考方案1】:

您应该只等待期货,而不是流。

这里await 在您的大部分代码中不是必需的,因为db.collection('DISPONIBILITE').snapshots() 返回一个流。你的其余代码似乎是同步的。除了compagnieList.add(infoCompagnie.value),这是一个未来,需要await

Future 表示不会立即完成的计算。在普通函数返回结果的地方,异步函数返回一个 Future,它最终将包含结果。当结果准备好时,未来会告诉你。

流是一系列异步事件。它就像一个 异步Iterable——在哪里,而不是在何时获取下一个事件 你要求它,“当它准备好时,流会告诉你有一个事件。”

最后一行也解释了为什么你不应该等待流:流告诉你当它准备好时有一个事件。

source

【讨论】:

以上是关于无法从 firebase Stream 查询返回对象列表的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 存储图像无法正确上传

颤振开发。通过 Stream Builder 从 Firebase Storage 和 Firestore 获取数据

Firebase 查询未从数据库返回任何结果

Flutter:如何在 [Firebase] 中使用 OR 条件获取流查询

无法从 firebase 查询 Flutter 中获取单个记录

Firebase 函数 Node.js 转换流