如何通过foreach函数在Dart Map中避免使用等待键

Vij*_*nta 2 foreach dictionary asynchronous async-await dart

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

myMap.forEach((a, b) { await myAsyncFunc(); } );
callFunc();
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

await Future.forEach(myMap.entries, (MapEntry entry) async {
  await myAsyncFunc();          
});
callFunc();
Run Code Online (Sandbox Code Playgroud)


Jon*_*ams 8

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

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


And*_*tar 8

你也可以使用map像:

const futures = myMap.map((a, b) => myAsyncFunc());
await Future.wait(futures);
callFunc();
Run Code Online (Sandbox Code Playgroud)

  • @VijayKumarKanta 不客气。请记住,结果略有不同。虽然我的回答一次开始所有异步工作并在最后等待所有,但另一个答案开始每一个并在开始下一个之前等待它。 (4认同)