
Promise는 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용한다. 일반적으로 웹을 구현할 때 서버에서 데이터를 요청하고 받아오기 위해 사용한다.
promise는 3가지 상태를 가질 수 있다.
new Promise(resolve,reject)
const promise = new Promise((resolve, reject() => {
  setTimeout() => {
    resolve("성공");
    reject(new Error("실패"))
    }, 2000);
)};
promise.then((value) => {
  console.log(value); ///"성공"
})
  .catch(error =>{
    console.log(error)
 })
  .finally{() => (
    console.log(""); 
  });
///value는 promise가 정상적으로 실행되어 resolve 인자로 전달하는 값
///error는 promise가 작동하지 않아 reject 인자로 전달하는 값 
/// finally는 성공하든 실패하든 상관없이 무조건 호출되는 값
const test = new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000); 
});
test
  .then(num => num*2)
  .then(num => num*3)
  .then(num => {
      return new Promise((resolve, reject) =>{
        setTimeout(() => resolve(num - 1), 1000);
      })
  })
  .then(num => console.log(num));
const getHen = () =>
  new Promise((resolve, reject) => {
    setTimeout(() => resolve('🐓'), 1000);
  });
const getEgg = hen =>
  new Promise((resolve, reject) => {
    setTimeout(() => reject(new Error(`error! ${hen} => 🥚`)), 1000);
  });
const cook = egg =>
  new Promise((resolve, reject) => {
    setTimeout(() => resolve(`${egg} => 🍳`), 1000);
  });
getHen() //
  .then(getEgg)
  .then(cook)
  .then(console.log)
  .catch(console.log);