인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

GG G님의 프로필 이미지

작성한 질문수

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

4. Promise 객체

계속 헷갈리네요. 이게 맞나요?

해결된 질문

작성

·

83

·

수정됨

1

🚨질문 작성법 및 안내사항

질문 작성법
섹션 4. Promise 객체

안녕하세요.

수강 중에 계속 헷갈려서 적어봤는데, 이게 맞나요?

  1. Promise가 resolve, reject를 콜백 함수로 사용.

  2. setTimeout에서 resolve(value+10)으로 호출.

  3. resolve는 Promise의 state를 성공? 으로 바꾸고 resolve= value+10 으로 변환

  4. workA는 Promise를 반환 ...(객체?)

  5. .then을 통해 promise의 resolve 프로퍼티 반환?
    반환된 값을 바로 매개변수 사용?(???)
    (resA) => {내용}; 을 콜백 함수로 이용.

workA(10).then((resA) => {내용}); 

 

Promise는 미리 정의된 객체고 new Promise로 promise에 생성? 한 거죠?

답변 2

1

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

안녕하세요 GG G님!
Promise 개념은 조금 어려운 개념이기 때문에 당연히 헷갈릴 수 있습니다 😀

Promise 객체는 생성될 때 내부적으로 executor 함수를 실행합니다. resolve와 reject는 executor 함수의 매개변수이며, 우리가 원하는 시점에 비동기 작업이 성공했을 때 resolve함수를, 실패했을 때 reject 함수를 호출하면 됩니다.

resolve(value + 10)을 호출하면 Promise 의 내부 상태가 fulfilled로 변경되고, value + 10 이 Promise 객체의 결괏값이 되죠.

 

workA()를 실행하면 workA는 결과로 Promise 객체를 반환합니다.
Promise 객체를 반환하기 때문에 then 메서드를 사용할 수 있습니다.

const workA = (value) => {
  const promise = new Promise((resolve) => {
    setTimeout(() => {
      resolve(value + 5);
    }, 5000);
  });
  return promise;
};

workA(10).then((resA) => {
  console.log(resA); // 20 (== value + 10)
});

따라서 위의 코드는, workA가 프로미스 객체를 반환하고, 5초 후에 resolve(15)을 호출한 다음,
.then()에 등록된 콜백 함수가 실행되면서, resA에는 resolve(15)의 값인 15가 전달되어 출력되는 것입니다.

 

Promise는 자바스크립트에 내장된 전역 객체이고, new Promise()를 사용해서 비동기 작업을 관리할 객체를 생성하는 것이라고 이해해주시면 될 것 같습니다 🙂 감사합니다.

GG G님의 프로필 이미지
GG G
질문자

감사합니다. 😁
Promise에 대해서 이해가 되네요!!


추가적으로 수업 내용과는 다른 질문을 드립니다.
강사님의 강의 중
'한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지'
까지 수강하면 react를 배울 수 있나요?
아니면 js를 더 배워야 하나요?

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

'웹 프론트엔드를 위한 자바스크립트 첫걸음' 강의는 자바스크립트 입문 강의로,
보다 더 많은 개념을 학습하시고 싶다면 '한 번에 끝내는 자바스크립트' 강의 수강을 추천드립니다. React 학습에도 많은 도움이 되실겁니다 :)

하지만 자바스크립트 기본 개념을 익혔으니, 바로 React를 배우고 싶다! 하신다면 바로 React 학습에 들어가셔도 무관합니다!!

0

인프런 AI 인턴님의 프로필 이미지

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

질문해주신 내용은 JavaScript의 비동기 처리와 Promise 객체에 대한 이해를 돕기 위한 것으로 보입니다. Promise는 비동기 작업의 성공 또는 실패를 처리하는 방법 중 하나로, 다음과 같은 개념들을 포함합니다.

  1. Promise 생성 및 상태 변화

    • Promise 객체는 new Promise로 생성됩니다. 생성 시 두 개의 콜백 함수인 resolvereject를 인자로 받습니다. resolve는 작업이 성공했을 때, reject는 실패했을 때 호출됩니다.
  2. 비동기 작업 완료 후 상태

    • setTimeout 은 비동기 작업을 예제한다면 특정 시간이 지난 후 resolve(value + 10) 을 호출하여 Promise의 상태를 fulfilled(성공)로 변경합니다.
  3. Promise 활용

    • workA 함수가 Promise를 반환하고, 이를 통해 .then() 메서드는 Promiseresolve 되었을 때의 값을 받아 활용합니다. 예를 들어 workA(10).then((resA) => { 내용 }); 와 같이 호출하면, resAresolve(value + 10)에서 전달된 값을 받습니다.
  4. 미리 정의된 객체와 생성자

    • Promise 는 자바스크립트에 내장된 생성자 함수입니다. 이를 통해 새로운 Promise 객체를 생성할 수 있으며, 비동기 상황에 적합한 방법으로 처리 흐름을 제어합니다.

아래 링크에서 비슷한 주제에 대한 설명을 확인하실 수 있습니다:

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

GG G님의 프로필 이미지

작성한 질문수

질문하기