dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

TypeScript での catch と finally の処理順

2022-09-09 00:24:09 | Node.js
TypeScript で例外が発生した場合に catch と finally がどのような順に実行されるかを調べてみました。
以下のプログラムでは、func1() から func2() を呼び出し、func2() からはさらに func3() を呼び出します。
func3() 内で throw した場合に、catch と finally がどのような順で呼び出されるかを確認します。

■プログラム
function func1() {
  try {
    console.log("func1: start");
    func2();
  }
  catch (e) {
    console.log("func1: catch");
  }
  finally {
    console.log("func1: finally");
  }

  console.log("func1: end");
}

function func2() {
  try {
    console.log("func2: start");
    func3();
  }
  catch (e) {
    console.log("func2: catch");
    throw e;
  }
  finally {
    console.log("func2: finally");
  }

  console.log("func2: end");
}

function func3() {
  try {
    console.log("func3: start");
    throw 'func3';
  }
  catch (e) {
    console.log("func3: catch");
    throw e;
  }
  finally {
    console.log("func3: finally");
  }

  console.log("func3: end");
}

func1();

■実行結果
func1: start
func2: start
func3: start
func3: catch
func3: finally
func2: catch
func2: finally
func1: catch
func1: finally
func1: end


実行結果をみると、finally が定義されている場合には catch が実行された後に finally が呼び出されていますが、catch 内で throw した場合には呼び出し元の処理に戻る前に finally が実行されています。


この記事についてブログを書く
« Typescript で id を生成 | トップ | python での例外発生時の exc... »

Node.js」カテゴリの最新記事