비동기 Promise 메소드

lim1313·2021년 8월 31일
0

TILPLUS

목록 보기
12/40
post-custom-banner

참고 예제 코드

const f1 = (message) => {
  console.log(message);
  return new Promise((res, rej) => {
    setTimeout(() => {
      res('1번 주문');
    }, 3000);
  });
};

const f2 = (message) => {
  console.log('2번', message); // 2번 1번 주문
  return new Promise((res, rej) => {
    setTimeout(() => {
      res('2번 주문');
    }, 1000);
  });
};

const f3 = (message) => {
  console.log('3번', message); //3번 2번 주문
  return new Promise((res, rej) => {
    setTimeout(() => {
      res('3번 주문');
    }, 2000);
  });
};

📌Promise.all

  • 한번에 실행되고 모두 이행되면 값을 받는다.
  • 하나의 정보도 err가 되면 error 발생
  • Promise.all은 배열 내 모든 값의 이행(또는 첫 번째 거부)을 기다린다.
  • 순회 가능한 객체에 프로미스가 아닌 값이 들어있다면 무시하지만, 이행 시 결과 배열에는 포함

promise

console.time('xx');
Promise.all([f1(), f2(), f3()]).then((res) => {
  console.log(res);
  console.timeEnd('xx'); // 대략 3초
});
function pickAll() {
  return Promise.all([getApple(), getBanana()]).then((fruits) =>
    fruits.join('+')
  );
}

pickAll().then(console.log);
const readAllUsers = () => {

  return new Promise((res, rej) => {
    let one = getDataFromFilePromise(user1Path).then((data) =>
      JSON.parse(data)
    );
    let two = getDataFromFilePromise(user2Path).then((data) =>
      JSON.parse(data)
    );
    Promise.all([one, two]).then((data) => res(data));
  });
};

async

async function order() {
  try {
    const result = await Promise.all([f1(), f2(), f3()]);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}
console.log('end');

async function order2() {
  let promiseDummy = [Promise 객체, Promise 객체, Promise 객체]

  return Promise.all(promiseDummy)
}

📌Promise.race

  • 하나라도 1등으로 완료되면 끝
  • 다수의 용량의 큰 이미지를 사용할 때 빠르게 로딩된 하나의 이미지를 보여줄 때 사용
console.time('xxx');
Promise.race([f1(), f2(), f3()]).then((res) => {
  console.log(res);
  console.timeEnd('xxx'); // 대략 1초
});

📌Promise.reject

📌Promise.resolve

profile
start coding
post-custom-banner

0개의 댓글