Dart嵌套期货whenComplete首先触发

时间:2015-03-18 09:24:21

标签: dart dart-async

我需要创建一系列数据库查询,每个查询都返回一个结果流。收集完所有信息并发送完毕后,即可完成所有信息。消息需要最后发送。在我的代码" sendCompleteMessageToClient'首先发送。

 Future.forEach(centerLdapNames.values, (center) {
   db
       .collection(center)
       .find({'date': {'\$gte': json['from'], '\$lt': json['to']}})
       .forEach(sendAppointmentToClient);
 }).whenComplete(() => sendCompleteMessageToClient("all"));

如何等待所有' sendAppointmentToClient'完成得好吗?

1 个答案:

答案 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((...))