강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jjmullan
jjmullan

câu hỏi đã được viết

React.js vừa tầm một miếng ăn: Từ cơ bản đến thực tiễn

2.13) Xử lý tác vụ bất đồng bộ 2. Promise

Promise 의 reject 관련 오류

Đã giải quyết

Viết

·

78

·

Đã chỉnh sửa

0

2.13) 비동기 작업 처리하기 2. Promise 강의에서, if 문을 활용한 타입 검증 시 오류인 상황(else) 에서의 reject 가 정상 동작하지 않습니다.

 

/* Promise */
const promise = new Promise((resolve, reject) => {
  // 비동기 작업 실행 함수 : executor
  setTimeout(() => {
    let num = 10;
    num = '10';
    console.log(num);

    if (typeof num === 'number') {
      // 성공일 때 호출
      resolve(`${num}은 숫자입니다.`);
    } else {
      // 실패일 때 호출
      reject(`${num}은 숫자가 아닙니다.`);
    }
  }, 1000 * 1);
});

 

위 코드에서, num 타입을 string 으로 변경했을 때 else 문이 진행되는 것으로 기대했습니다. 이때, 브라우저의 디버거에서 오류를 발생시키면서 정상 동작되지 않습니다.

 

스크린샷 2025-09-03 오전 9.54.15.png.webp

 

터미널에서는 UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). 라는 오류가 발생됩니다.

 

스크린샷 2025-09-03 오전 9.55.49.png.webp

 

 catch 문 없이 reject 를 단독으로 사용하는 것에 문제가 있는 것 같은데, 예제와는 다르게 동작하는 것 같아 문의드립니다.

javascriptreactnode.js

Câu trả lời 2

1

jjmullan님의 프로필 이미지
jjmullan
Người đặt câu hỏi

아하! 감사합니다. 오류 메시지도 제대로 파악하지 않고 질문부터 했네요🥲 감사합니다!

1

winterlood님의 프로필 이미지
winterlood
Người chia sẻ kiến thức

안녕하세요 이정환입니다.

결론부터 말씀드리면 예제와 동일하게 동작하고 있습니다 😀

질문에 첨부해주신 아래의 사진을 살펴보면 기대하신대로 else 문이 정상적으로 잘 실행되어 reject가 실행되는걸 보실 수 있습니다.

그러나 이때 reject는 비동기 작업을 오류로 처리하는 메서드인 만큼 예외를 발생시킵니다. 따라서 지금처럼 디버거에서 동작을 확인하시면 말씀하신 것 처럼 오류 발생이 감지됩니다.

image.png

 

또 터미널에서는 UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). 오류가 발생한다고 하셨는데요 이는 reject 메서드가 호출되어 발생하는 오류로 의도된 오류입니다.

오류 메세지의 마지막 부분을 읽어보시면 rejecting a promise which was not handled with .catch(). 라고 하여 Promise에서 reject가 호출되어서 본 오류가 발생했음을 안내해주고 있기도 합니다.

 

우리 강의에서는 브라우저 디버거와 VSCode 터미널이 아닌 브라우저 콘솔을 통해 본 예제의 결과를 확인하고 있습니다. 강의를 자세히 살펴보시면 아래 그림처럼 브라우저 콘솔에도 동일한 오류 메세지가 발생하고 있는걸 보실 수 있습니다.

image.png

 

강의의 예제와 동일한 결과를 확인하시려면, 강의와 동일하게 브라우저의 디버거가 아닌 console 탭을 통해 결과를 확인하셔야 합니다.

Hình ảnh hồ sơ của jjmullan
jjmullan

câu hỏi đã được viết

Đặt câu hỏi