Dart Futureクラスのstatic wait()メソッドについてメモ書き。
wait()は複数のFutureの実行結果を取得するstaticメソッド。
wait()の戻り値はFuture<List<T>>となっており、Futureの実行結果は配列で返される。
第1引数で実行結果を取得するFutureを配列で受け取る。
第2引数はbool型名前付きオプション引数「eagerError:」で、trueを指定するといずれかのFutureがエラーになると即座に終了する。falseを指定すると完了を待ってから終了する。デフォルトはfalse。
第3引数はvoid型名前付きオプション引数「cleanUp:」。「cleanUp:」はエラー時に使用される。wait()で複数のFuture処理を実行し、そのうちの一つがエラーになると成功したFutureはリソースを解放せずに終了してしまう。「cleanUp:」を使用する事で成功したFutureの戻り値を受け取り、リソースを解放することができる。
第2、第3引数はオプション引数なので省略可能。
コーディングで動きを確認。
testTime1()関数とtestTime2()関数をwait()の引数として指定し、実行結果を出力する。
void main() async {
var val = await Future.wait([testTime1(), testTime2()]);
for (var element in val) {
print(element);
}
}
Future<String> testTime1() async {
await Future.delayed(Duration(seconds: 1));
return "testTime1";
}
Future<String> testTime2() async {
await Future.delayed(Duration(seconds: 2));
return "testTime2";
}実行結果。
testTime1
testTime2次はtestTime1()関数で意図的にエラーを発生させ、testTime2()関数は正常終了させる。
引数として「eagerError:false 」と「cleanUp:」を追加する。
void main() async {
try {
var val = await Future.wait(
[testTime1(), testTime2()],
eagerError: false,
cleanUp: (successValue) {
print(successValue);
},
// ignore: body_might_complete_normally_catch_error
).catchError((err) {
📁 Dart Futureクラスの全体像・主要メソッド
Futureクラスの非同期処理や主要メソッド一覧は、以下の解説マップをご覧ください。
➔ Dart Futureクラスの使い方:非同期処理と主要メソッド解説マップ

コメント