JavaScript

async & await

김꼬알 2023. 6. 26. 16:45

async & await

  • clear style of using promise

 

1. async

// promise
function fetchUser() {
  return new Promise((resolve, reject) => {
    // do network request in 10 secs...
    resolve('ellie');
  });
}

const user fetchUser();
user.then(console.log);
console.log(user);


// async
async function fetchUser() {
    // do network request in 10 secs...
    return 'ellie';
}

const user fetchUser();
user.then(console.log);
console.log(user);

 

2. await

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function getApple() {
  await delay(3000);
  return 'apple';
}

async function getBanana() {
  await delay(3000);
  return 'banana';
}

async function pickFruits() {
  const apple = await getApple();
  const banana = await getBanana();
  return `${apple} + ${banana};
}

pickFruits().then(console.log);

 

3. await 병렬 처리

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function getApple() {
  await delay(3000);
  return 'apple';
}

async function getBanana() {
  await delay(3000);
  return 'banana';
}

async function pickFruits() {
  const applePromise = getApple();
  const bananaPromise = getBanana();
  const apple = await applePromise();
  const banana = await bananaPromise();
  return `${apple} + ${banana};
}    // 먼저 promise를 만들어 준 다음 await로 실행하면 병렬로 처리할 수 있음

pickFruits().then(console.log);

 

4. useful Promise APIs

//Promise.all - 배열에 전달된 모든 promise를 동시에 병렬로 수행
function pickAllFruits() {
  return Promise.all([getApple(), getBanana()]).then(fruits =>
    fruits.join(' + ')
  );
}
pickAllFruits().then console.log);

// Promise.race - 배열에 전달된 promise 중 가장 먼저 값을 return 하는 것만 출력
function pickOnlyOne() {
  return Promise.race([getApple(), getBanana()]);
}

pickOnlyOne().then(console.log);

 

'JavaScript' 카테고리의 다른 글

[구름톤 챌린지] 1주차_프로젝트 매니징  (0) 2023.08.17
event, event handler  (0) 2023.06.29
promise  (0) 2023.06.23
callback  (0) 2023.06.22
function  (0) 2023.06.13