⏱️
Dart で Future の逐次処理をする
内容
Dart
の Future.wait
は平行処理です.
List<Future Function()>
の逐次処理をする関数は特に提供されていないので, 自作します.
実装
Future<List<T>> executeSequentially<T>(
List<Future<T> Function()> futureTasks,
) async {
final results = <T>[];
for (final task in futureTasks) {
final result = await task();
results.add(result);
}
return results;
}
再起処理でも同様に実装できます.
この場合, List.add
を使わずに実装できます.
import 'dart:async';
Future<List<T>> executeSequentially<T>(List<Future<T> Function()> futureTasks) =>
_executeSequentially(futureTasks);
Future<List<T>> _executeSequentially<T>(
List<Future<T> Function()> futureTasks, [
int index = 0,
List<T> accumulated = const [],
]) async {
if (index >= futureTasks.length) {
return accumulated;
}
final result = await futureTasks[index]();
return _executeSequentially(
futureTasks,
index + 1,
[...accumulated, result],
);
}
実行例
Discussion