我需要创建一系列数据库查询,每个查询都返回一个结果流。收集完所有信息并发送完毕后,即可完成所有信息。消息需要最后发送。在我的代码" sendCompleteMessageToClient'首先发送。
Future.forEach(centerLdapNames.values, (center) {
db
.collection(center)
.find({'date': {'\$gte': json['from'], '\$lt': json['to']}})
.forEach(sendAppointmentToClient);
}).whenComplete(() => sendCompleteMessageToClient("all"));
如何等待所有' sendAppointmentToClient'完成得好吗?
答案 0 :(得分:2)
我猜你错过了未来的回归
Future.forEach(centerLdapNames.values, (center) {
return db // <== always return the returned future from calls to async functions to keep the chain connected
.collection(center)
.find({'date': {'\$gte': json['from'], '\$lt': json['to']}})
.forEach(sendAppointmentToClient);
}).whenComplete(() => sendCompleteMessageToClient("all"));
如果你使用wait,这些调用可能会并行执行而不是一个接一个地执行
Future.wait(centerLdapNames.values.map((center) { ...}, eagerError: false)
.whenComplete((...))