돌아가기

setTimeout에서의 에러

아래 예시에서 .catch가 트리거 될까요? 이유와 함께 .catch가 트리거 될지 안 될지를 맞춰보세요.

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

.catch트리거 되지 않습니다.

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

이 챕터에서 언급했듯이, '암시적 try..catch'가 함수 코드를 감싸고 있으므로 모든 동기적 에러는 '암시적 try..catch'에서 처리됩니다.

하지만 여기에서 에러는 executor(실행자, 실행 함수)가 실행되는 동안이 아니라 나중에 발생합니다. 따라서 프라미스는 에러를 처리할 수 없습니다.