
어떻게 하면 깔끔하게 비동기처리 코드를 작성할 수 있을까?
프로미스 함수는,
기능이 정상적으로 작동하면 성공 메세지를 전달하고 다음 함수를 실행한다.
promise is a JS object for asynchronous operation.
자바스크립트에 내장된 오브젝트로, 비동기적인 수행을 위한 함수
무거운 기능을 수행하고 있는지, 기능 수행을 완료했는지 등 상태를 이해하는 것이 중요
제공된 데이터와 이 데이터를 사용하는 사람의 차이점을 이해하는 것이 중요
// state : pending=>fulfilled or rejected
// producer vs consumer
// when new Promise is created, the excuter runs automatically.
// 프로미스 함수를 만드는 순간 executor함수는 바로 실행된다.
// 네트워크 통신을 버튼클릭 등 사용자가 요청한 시에만 이루어지게 만드려면 불필요하게 통신이 될 수 있다./
const promise = new Promise((resolve, reject) => {
  // doing some heavy work(network,read files)
  console.log("doing something....");
  setTimeout(() => {
    resolve("ellie");
    // reject(new error("no network"));
  }, 2000);
});
promise
  .then((value) => {
    console.log(value);
  })
  //   promise를 리턴하므로 리턴된 프로미스의 catch를 다시 호출할 수 있다.
  .catch((error) => {
    console.log(error);
  })
  .finally(() => {
    console.log("fnally");
  });
//   성공했건 아니건 무조건 마지막에 호출
const fetchNumber = new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000);
});
fetchNumber
  .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));
//   then은 값 뿐만아니라 promise를 전달 할 수 있다.
// 여러개의 비동기를 묶어서 처리할 수도 있음
// 오류 처리하기