프로미스(Promise)

// callback Hell
setTimeout(() => {
  console.log('A');
  setTimeout(() => {
    console.log('B');
      setTimeout(() => {
      console.log('C');
    }, 1000);
  }, 2000);
}, 3000); 
// 위의 콜백 지옥을 프로미스로 대체 
function pro1(str, ms) {
  return new Promise((resoleve, reject) => {
    setTimeout(() => {
      if(str === 'A' || str === 'B' || str === 'C'){
        console.log(str);
        return resoleve();
      } else {
        reject();
      }
    }, ms);
  });
}

Promise 객체 처리

pro1('A', 500)
.then(() => {
  console.log('Then');
}) // 작업이 성공했을 때, than() 실행
.catch(() => {
  console.log('Catch');
}) // 작업이 실패했을 때, catch() 실행
.finally(() => {
  console.log('Finally')
}); // 성공, 실패 여부 상관 없이 무조건 finally(); 실팽
pro1('A',3000)
.then(() => {
  pro1('B', 2000)
  .then(() => {
    pro1('C', 1000)
    .then()
    .catch();
  })
  .catch();
})
.catch();

pro1('A',3000)
.then(() => {
  return pro1('B', 2000);
})
.then(() => {
  return pro1('C', 1000);
})
.catch();

Promise 객체 상태

프로미스 지옥(Promise Hell)