Map forEach函数退出并在内部等待

时间:2018-09-11 12:51:32

标签: dictionary asynchronous foreach dart async-await

因此,我有一个映射,该映射与使用其中的项目进行的一些异步处理有关。我使用了forEach循环构造,并且在回调内部被设计为异步的,因为我在迭代主体内调用了一个等待状态

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

所有项目都经过迭代后,我需要调用callFunc()。但是forEach立即退出。救命!

4 个答案:

答案 0 :(得分:6)

Map.entries上使用for循环,而不是forEach。假设您处于异步函数中,则在for循环的主体中等待将暂停迭代。条目对象还将允许您访问键和值。

Future<void> myFunction() async {
  for (var entry in myMap.entries) {
    await myAsyncFunction(entry.key, entry.value);
  }
  callFunc();
}

答案 1 :(得分:2)

您也可以像这样使用map

const futures = myMap.map((a, b) => myAsyncFunc());
await Future.wait(futures);
callFunc();

答案 2 :(得分:1)

您还可以将Future.forEach与这样的地图一起使用:

await Future.forEach(myMap.entries, (MapEntry entry) async {
  await myAsyncFunc();          
});
callFunc();

答案 3 :(得分:0)

用于从HashMap中提取Maplist的条目。

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