강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

crk1004님의 프로필 이미지
crk1004

작성한 질문수

웹 프론트엔드를 위한 자바스크립트 첫걸음

Promise 객체

4-23 Promise객체 12:05 코드 질문

작성

·

32

0

질문 작성법
- 몇 섹션의 어떠한 강의에 대한 질문인지 작성해주세요. (ex. 섹션2 조건문에 대한 질문)
- 질문은 최대한 구체적으로 작성해주세요.
- 비슷한 질문이 올라와있는지 확인해주세요.
- 코드가 포함된 질문은 아래와 같이 코드블록을 사용해주세요.

console.log("hello world");


안내사항
- 질문에 대한 답변은 보통 주말, 공휴일을 제외한 평일 오전 시간에 답변해드립니다.
- '질문 해결'은 답변 작성일 기준 1일 이후에 설정됩니다.

 

섹션4 23 Promise객체 강의에서 12:05시간에 아래와 같은 예제를 설명하는데,

const executor = (resolve, reject) => {
    setTimeout( () => {
        reject("실패");
    }, 3000);
};

const promise = new Promise(executor);
promise
    .then((res) => {
        console.log(res);
     })
    .catch((err) =>{
        console.log(err);
    });

코드 아래에서 promise.then(...).catch(...);

와 같은 형식으로 사용될 수 있는 이유를 알려주세요.

then과 catch는 property라고 했는데, 이와 같이 초기화 하는 내용은 강의에서 못들은것 같고, Promise chaining으로 넘겨짚기에는 각 함수에서 객체를 리턴하지도 않고... 모르겠네요.

답변 3

0

효빈 Hyobin님의 프로필 이미지
효빈 Hyobin
지식공유자

안녕하세요 crk1004님 🙂 질문 감사합니다.

promise.then(), 그리고 catch()와 같이 사용할 수 있는 이유는, then/catch가 Promise 객체에 달려있는 '함수 프로퍼티(메서드)'이며, 호출 결과로 새로운 프로미스를 반환하기 때문입니다.

따라서 promise.then()의 반환값이 또다른 Promise라서, 그 뒤에 바로 catch를 이어서 작성할 수 있습니다.

0

효빈 Hyobin님의 프로필 이미지
효빈 Hyobin
지식공유자

안녕하세요 crk1004님 🙂 질문 감사합니다.

promise.then(), 그리고 catch()와 같이 사용할 수 있는 이유는, then/catch가 Promise 객체에 달려있는 '함수 프로퍼티(메서드)'이며, 호출 결과로 새로운 프로미스를 반환하기 때문입니다.

따라서 promise.then()의 반환값이 또다른 Promise라서, 그 뒤에 바로 catch를 이어서 작성할 수 있습니다.

-1

안녕하세요, 인프런 AI 인턴입니다. crk1004님.

Promise 객체는 비동기 작업의 결과를 처리하기 위한 JavaScript의 방법 중 하나인데요. 여러분이 작성한 예제에서 promise.then(...).catch(...); 구문이 어떻게 작동하는지 설명드리겠습니다.

Promise는 생성된 후 두 개의 메서드를 주로 사용합니다: then()catch().

  1. then() 메서드: 이 메서드는 Promise가 성공적으로 이행(fulfilled)되었을 때 호출됩니다. resolve로 전달된 값이 then() 메서드의 함수 인자로 들어가게 됩니다.

  2. catch() 메서드: 이 메서드는 Promise가 거부(rejected)되었을 때 호출됩니다. reject로 전달된 값이 catch() 메서드의 함수 인자로 들어가게 됩니다.

위 예제에서 Promise는 3000밀리초 후에 reject("실패");를 호출하게 되어 있습니다. 따라서 비동기 작업이 실패로 처리되고, catch() 메서드가 실행되어 “실패”가 출력됩니다. 이때 then()은 실행되지 않죠.

Promise 객체 자체는 체이닝이 가능하도록 설계되어 있습니다. 이러한 기능 덕분에 then() 결과에 대해 또 다른 처리를 하거나, catch()로 에러를 처리하는 것을 연속적으로 호출할 수 있는 것이죠.

아래의 링크에서 추가 설명을 확인할 수 있습니다:
- 비동기 처리와 Promise의 이해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

crk1004님의 프로필 이미지
crk1004
질문자

기존 답변과 다른 경우이며, "Promise 객체 자체는 체이닝이 가능하도록 설계되어 있습니다."라고 한다면 설계 및 내부 동작에 대한 설명이 필요합니다.

crk1004님의 프로필 이미지
crk1004

작성한 질문수

질문하기