Функция Map forEach выходит с ожидающим внутри - PullRequest
0 голосов
/ 11 сентября 2018

Итак, у меня есть карта, которая имеет отношение к некоторой асинхронной обработке с использованием элементов внутри. Я использовал конструкцию цикла forEach, и внутри функции обратного вызова она была асинхронной, потому что я вызываю ожидание внутри тела итерации

myMap.forEach((a, b) { await myAsyncFunc(); } );
callFunc();

Мне нужно, чтобы callFunc () вызывался после итерации всех элементов. Но forEach выходит немедленно. Помогите!

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Вы также можете использовать map как:

const futures = myMap.map((a, b) => myAsyncFunc());
await Future.wait(futures);
callFunc();
0 голосов
/ 11 апреля 2019

записей, используемых в извлечении Maplist из HashMap.

 products.entries.forEach((e) {
  var key = e.key;
  var values = e.value;
    double sum = 0;
    values.forEach((value) => sum += value[PlanogramShelf.SHELF_FULL]);
    target.add(OrdinalSales(
        key, double.parse((sum / valueslength).toStringAsFixed(2))));
  });
0 голосов
/ 11 сентября 2018

Используйте цикл for Map.entries вместо forEach. Если вы находитесь в асинхронной функции, ожидание в теле цикла for приостановит итерацию. Объект ввода также позволит вам получить доступ как к ключу, так и к значению.

Future<void> myFunction() async {
  for (var entry in myMap.entries) {
    await myAsyncFunction(entry.key, entry.value);
  }
  callFunc();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...