ex11-04-1

実行結果

a: bを呼び出す前
b: cを呼び出す前
c: エラーをスローする
---- a呼び出し後のerr.stack ----
Error: c error at c (https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:13:9) at b (https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:8:3) at a (https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:3:3) at https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:23:3
---- 終わり -----
d: cを呼び出す前
c: エラーをスローする
---- d呼び出し後のerr.stack ----
Error: c error at c (https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:13:9) at d (https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:18:3) at https://marlin-arms.com/support/ljs3/example-mbl/ch11/ex11-04-1/main.js:31:3
---- 終わり ----

ソース

function a() {
  console.log('a: bを呼び出す前');
  b();
  console.log('a: 終了');
}
function b() {
  console.log('b: cを呼び出す前');
  c();
  console.log('b: 終了');
}
function c() {
  console.log('c: エラーをスローする');
  throw new Error('c error');
  console.log('c: 終了');
}
function d() {
  console.log('d: cを呼び出す前');
  c();
  console.log('d: 終了');
}

try {
  a();
} catch(err) {
  console.log("---- a呼び出し後のerr.stack ----");
  console.log(err.stack);
  console.log("---- 終わり -----");
}

try {
  d();
} catch(err) {
  console.log("---- d呼び出し後のerr.stack ----");
  console.log(err.stack);
  console.log("---- 終わり ----");
}