当 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((...))
我需要进行一系列数据库查询,每个 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((...))