无法从 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 查询返回对象列表的主要内容,如果未能解决你的问题,请参考以下文章
颤振开发。通过 Stream Builder 从 Firebase Storage 和 Firestore 获取数据
Flutter:如何在 [Firebase] 中使用 OR 条件获取流查询