2015-03-18 2 views
1

Мне нужно сделать серию запросов к базе данных, каждый из которых возвращает поток результатов. После того, как вся информация будет собрана и отправлена, сообщение «complete» должно быть отправлено последним. В моем коде сначала отправляется sendCompleteMessageToClient.Дарт вложенных фьючерсов при первом завершении пожаров

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

Как я жду всех 'sendAppointmentToClient', чтобы закончить должным образом?

ответ

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

Если вы используете ждать эти вызовы могут выполняться параллельно, а не один за другим

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

Спасибо, что было Это. –

Смежные вопросы