当 Complete 首先触发时,飞镖嵌套期货

Dart nested futures whenComplete fires first

我需要进行一系列数据库查询,每个 return 一个结果流。收集并发送所有信息后,需要最后发送 'complete' 消息。在我的代码中 'sendCompleteMessageToClient' 首先发送。

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

如何等待所有 'sendAppointmentToClient' 正确完成?

我猜你只是错过了未来的 return

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"));

如果您使用等待,这些调用可能会并行执行,而不是一个接一个地执行

Future.wait(centerLdapNames.values.map((center) { ...}, eagerError: false)
.whenComplete((...))