レッスンに戻る

setTimeout 内でエラーが発生しました

どう思いますか? .catchが動作しますか? 答えを説明してください。

new Promise(function(resolve, reject) {
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
}).catch(alert);

答えは、いいえ、動作しません

new Promise(function(resolve, reject) {
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
}).catch(alert);

章で言及したように、関数コード周辺には「暗黙のtry..catch」があります。そのため、すべての同期的なエラーが処理されます。

しかしここでは、エラーは実行中にではなく後から生成されます。そのため、Promiseでは処理できません。