본문 바로가기
카테고리 없음

JS - 프로미스 (Promise)

by 달보드레. 2021. 12. 9.

Promise

비동기 함수를 동기 처리하기 위해 고안한 객체

비동기 작업이 완료된 이후에 다음 작업을 연결시켜 진행할 수 있다.

작업 결과 따라 성공 또는 실패를 리턴하며 결괏값을 전달받을 수 있습니다.

* Promise 자체는 동기이다 하지만 그 뒤의 then이 비동기로 동작하기 때문에 비동기 취급

// callback 패턴
function delay(sec, callback) {
  setTimeout(() => {
    callback("callback 패턴 " + new Date());
  }, sec * 1000);
}

delay(1, (result) => {
  console.log(1, result);
  console.log("=============================================");
});
----------------------------------------------------------------------------------------
// promise 패턴
function delayP(sec) {
  // resolve : 할일을 다 했을때 호출 , reject: 할일을 하다가 예외 발생시 호출
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Promise 패턴 " + new Date());
     }, sec * 1000);
    });
}

delayP(1)
  .then((result) => {
    console.log(1, result);
    return delayP(1);
  })
  .then((result) => {
    console.log(2, result);
    return delayP(1);
  })
  .then((result) => {
    console.log(3, result);
    return "promise 끝";
  })
  .then((result) => {
    console.log(result);
  });

/** resolve를 호출 > resolve를 통해 어떤 결과 값을 넘기게 되면
    그 결과값을 then 예외가 없을시에 받은값을 그 함수에게 넘겨 준다
    (여기서는 result에 담겨서 console.log에 찍히는것) 
**/

실행 결과