How to Async/await in List.forEach() in Dart
You need to use Future.forEach.
main() async { print("main start"); await asyncOne(); print("main end");}asyncOne() async { print("asyncOne start"); await Future.forEach([1, 2, 3], (num) async { await asyncTwo(num); }); print("asyncOne end");}asyncTwo(num) async{ print("asyncTwo #${num}");}
I don't think it's possible to achieve what you want with the forEach
method. However it will work with a for
loop. Example;
asyncOne() async { print("asyncOne start"); for (num number in [1, 2, 3]) await asyncTwo(number); print("asyncOne end");}
You can't use forEach
for this because it doesn't actually look at the return values of its callbacks. If they are futures, they will just be lost and not awaited.
You can either do a loop like Steven Upton suggested, or you can use Future.wait
if you want the operations to run simultaneously, not one after the other:
asyncOne() async { print("asyncOne start"); await Future.wait([1, 2, 3].map(asyncTwo)); print("asyncOne end");}