Async and Practical
Future.wait
Combine Several Futures
Future.wait(futures) returns one Future that completes with a list once every input future is ready. Each score here is an async function that returns immediately, so the whole example settles without timers or external events.
Program
Play the program to await three scores together and combine them.
future_wait.dart
Replay: real traced execution (multi-file project)
Future<int> score(String name) async {
if (name == 'Ada') return 9;
if (name == 'Lin') return 12;
return 6;
}
Future<void> main() async {
var futures = [score('Ada'), score('Lin'), score('Mia')];
var results = await Future.wait(futures);
var total = results.reduce((a, b) => a + b);
print('$results sum=$total');
}
futures ← 3 score futures
7Future<void> main() async {8 var futures = [score('Ada'), score('Lin'), score('Mia')];9 var results = await Future.wait(futures);values this step3 score futuresfuturesreturn ← 9
1Future<int> score(String name) async {2 if (name == 'Ada') return 9;3 if (name == 'Lin') return 12;values this step9returnAdanamereturn ← 12
2if (name == 'Ada') return 9;3if (name == 'Lin') return 12;4return 6;values this step12returnLinnamereturn ← 6
3 if (name == 'Lin') return 12;4 return 6;5}values this step6returnMianameresults ← [9, 12, 6]
8var futures = [score('Ada'), score('Lin'), score('Mia')];9var results = await Future.wait(futures);10var total = results.reduce((a, b) => a + b);values this step[9, 12, 6]results3 futures resolvedfuturestotal ← 27
9var results = await Future.wait(futures);10var total = results.reduce((a, b) => a + b);11print('$results sum=$total');values this step27total[9, 12, 6]resultsprint('$results sum=$total');
10 var total = results.reduce((a, b) => a + b);11 print('$results sum=$total');12}output[9, 12, 6] sum=27values this step[9, 12, 6]results27total
Future.wait
`Future.wait(futures)` produces one future that completes with a list of all results in order.
already-completed
Each `async` `return` completes that function's future with a value, so no timers, files, or network are involved.
aggregate
`results.reduce((a, b) => a + b)` collapses the list into one total once the futures have all settled.