Dictionary 如何通过foreach函数避免在省道图中使用等待键

Dictionary 如何通过foreach函数避免在省道图中使用等待键,dictionary,asynchronous,foreach,dart,async-await,Dictionary,Asynchronous,Foreach,Dart,Async Await,因此,我有一个映射,它与使用内部项的异步处理有关。我使用了forEach循环构造,回调内部设计为异步的,因为我在迭代体内部调用了wait myMap.forEach((a, b) { await myAsyncFunc(); } ); callFunc(); 我需要在迭代所有项之后调用callFunc()。但forEach马上就退出了。救命啊 使用for循环而不是forEach。如果您使用的是异步函数,那么在for循环体中等待将暂停迭代。entry对象还允许您访问键和值 Future<v

因此,我有一个映射,它与使用内部项的异步处理有关。我使用了forEach循环构造,回调内部设计为异步的,因为我在迭代体内部调用了wait

myMap.forEach((a, b) { await myAsyncFunc(); } );
callFunc();
我需要在迭代所有项之后调用callFunc()。但forEach马上就退出了。救命啊

使用for循环而不是forEach。如果您使用的是异步函数,那么在for循环体中等待将暂停迭代。entry对象还允许您访问键和值

Future<void> myFunction() async {
  for (var entry in myMap.entries) {
    await myAsyncFunction(entry.key, entry.value);
  }
  callFunc();
}
Future myFunction()异步{
for(myMap.entries中的var条目){
等待myAsyncFunction(entry.key,entry.value);
}
callFunc();
}

您也可以使用
地图
如:

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

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

您还可以将Future.forEach与以下映射一起使用:

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

嗯,好的,看起来它可以工作,但我需要键和值,这就是为什么我必须首先使用地图的原因。编辑-条目提供键和值。如果您有这样的需求,那么在您的问题中更容易给出它们,然后在后面的commentsYep中,我对dart和Flatter是新手,而且myMap实际上应该是代码中的myMap.entries。谢谢,成功了。谢谢你的回答。然而,我从选择的答案中得到了我所需要的。干杯@不客气。请记住,结果略有不同。虽然我的答案是一次启动所有异步工作,并在最后等待所有异步工作,但另一个答案是启动每个异步工作,并在开始下一个异步工作之前等待。我认为您的解决方案更好一些,而且性能更高。我认为应该用它来代替。不过我不会改变答案的选择。谢谢!没问题。这应该被接受,因为它使用forEach而不是for循环。谢谢你,乔丹!