如何解决无法从Firebase流查询中返回对象列表
我正在执行一个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
}
}
}
}
}
解决方法
您应该只等待期货,而不是流。
在您的大多数代码中,row {
border: 1px solid darkgreen;
padding: 20px;
margin-bottom: 10px;
}
并不是必需的,因为await
返回一个流。而其余的代码似乎是同步的。 db.collection('DISPONIBILITE').snapshots()
除外,这是一个未来,需要compagnieList.add(infoCompagnie.value)
。
“未来”表示无法立即完成的计算。在普通函数返回结果的地方,异步函数返回Future,最终将包含结果。将来会告诉您结果何时准备就绪。
流是一系列异步事件。就像一个 异步Iterable-在什么地方,而不是在什么时候获取下一个事件 您要求它,“信息流告诉您准备就绪时有一个事件。”
最后一行还解释了为什么不应该在流上等待:流告诉您准备就绪时会有一个事件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。