Dart FutureクラスwhenComplete()メソッド

Dar言語StreamクラスtoSet()メソッドDart

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

コメント

タイトルとURLをコピーしました