Dart FutureクラスのwhenComplete()メソッドについてメモ書き。
whenComplete()はFuture完了時に実行されるメソッド。正常終了、異常終了に関わらず実行される。try-catch文のfinallyブロックと同じようなもの。
コーディングで動きを確認。以下コードはwhenComplete()が実行されると「whenComplete」と出力される。timeout()メソッドについては以下を参照の事。
先ずは正常終了で確認。
void main() {
testTimeout()
.timeout(
Duration(seconds: 2),
)
.then((value) => print(value))
.catchError((onError) {
print(onError);
}).whenComplete(() => print("whenComplete"));
}
Future<String> testTimeout() async {
await Future.delayed(Duration(seconds: 1));
return "処理を完了しました";
}
実行結果。
処理を完了しました
whenComplete
次は異常終了で確認。
「TimeoutException」が発生するようにDurationの値を変更する。
void main() {
testTimeout()
.timeout(
Duration(seconds: 1),
)
.then((value) => print(value))
.catchError((onError) {
print(onError);
}).whenComplete(() => print("whenComplete"));
}
Future<String> testTimeout() async {
await Future.delayed(Duration(seconds: 2));
return "処理を完了しました";
}
実行結果。
TimeoutException after 0:00:01.000000: Future not completed
whenComplete
コメント