async_await

Yu Sang MinΒ·6일 μ „
0

JavaScript

λͺ©λ‘ 보기
47/48

πŸ“Œ async

πŸ’‘ ν”„λ‘œλ―ΈμŠ€μ— then λ©”μ„œλ“œλ₯Ό 체이닝 ν˜•μ‹μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것 보닀 가독성을 높일 수 μžˆλ‹€.

async function getCode() {
    return β€œMike”
} 
  • μœ„μ™€κ°™μ΄ ν•¨μˆ˜μ•žμ— async ν‚€μ›Œλ“œλ₯Ό 뢙이면 항상 ν”„λ‘œλ―ΈμŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€.
async function getName() {
    return β€œMike”;
}

console.log(getName());  // promise { <pending> }
  • ν”„λ‘œλ―ΈμŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” λͺ¨μŠ΅
  • λ•Œλ¬Έμ— then λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
async function getName(name) {
    return new Promise ((resolve, reject) => {
         setTimeout(() => {
              resolve(name);
         }, 2000);
    })
}

getName(β€œMike”).then((name) => {
    console.log(name);  // 2μ΄ˆν›„ - Mike
})
  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  then을 μ‚¬μš©ν•˜μ—¬ name이 returnλ˜λŠ” λͺ¨μŠ΅
  • λ‹€μ‹œ μ–˜κΈ°ν•˜μžλ©΄ then은 ν”„λ‘œλ―ΈμŠ€ 객체의 result 값을 λ‹€μŒ ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš© κ°€λŠ₯ ν•˜λ‹€.

πŸ“Œawait

function getName(name) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(name);
        }, 2000)
    })
}

async function showName() {
    const result = await getName(β€˜Mike’);
    console.log(result);
}

showName();
  • await ν‚€μ›Œλ“œλŠ” async κ°€ 뢙은 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
  • awaitκ°€ λΆ™μœΌλ©΄ ν•΄λ‹Ή ν•¨μˆ˜κ°€ μ™„λ£Œλ λ•Œ κΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ 리턴 값을 λ°˜ν™˜ν•œλ‹€.
  • result에 2μ΄ˆν›„μ— 값이 ν• λ‹Ήλ˜κ³  이후에 console.log()에 μ°νžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€.
  • **μ΄λŠ” then을 ν†΅ν•œ ν”„λ‘œλ―ΈμŠ€ 체이닝 보닀 가독성을 높인닀.

πŸ“Œ 예제

const f1 = () => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res(β€œ1번 μ£Όλ¬Έ μ™„λ£Œβ€);
        }, 1000);
    });
};

const f2 = (message) => {
     console.log(message);
     return new Promise((res, rej) => {
          setTimeout(() => {
               res(β€œ2번 μ£Όλ¬Έ μ™„λ£Œβ€);
          }, 3000);
     });
};

const f3 = (message) => {
    console.log(message)
    return new Promise((res, rej) => {
        setTimeout(() => {
            res(β€œ3번 μ£Όλ¬Έ μ™„λ£Œβ€);
        }, 2000);
    });
};

console.log(β€œμ‹œμž‘β€);
f1()
    .then((res) => f2(res))
    .then((res) => f3(res))
    .then((res) => console.log(res))
    .catch(console.log)
    .finally(() => {
        console.log(β€œλβ€);
     })
  • μœ„ μ½”λ“œλŠ” ν”„λ‘œλ―ΈμŠ€ 체이닝을 톡해 res μƒνƒœμ—μ„œ result에 ν• λ‹Ήλ˜λŠ” 값을 then을 톡해 λ‹€μŒ ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” 방식이닀.
  • μœ„ μ½”λ“œμ—μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” ꡬ문을 async_await ꡬ문으둜 λ¦¬νŒ©ν† λ§ ν•΄λ³΄μž

πŸ“Œ μ½”λ“œ λ¦¬νŒ©ν† λ§

async function order() {
    const result1 = await f1()
    const result2 = await f2(result1);
    const result3 = await f3(result2);
    console.log(result3);
    console.log(β€œμ’…λ£Œβ€);
}

order();
  • order() κ°€ 호좜되면 result1에 f1()의 리턴값을 1초 후에 ν• λ‹Ήν•œλ‹€.
  • await ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— λ‹€μŒ ꡬ문으둜 λ„˜μ–΄κ°€μ§€ μ•ŠλŠ”λ‹€.
  • 이후 result1 κ°’ (β€œ1번 μ£Όλ¬Έ μ™„λ£Œβ€)을 f2() ν•¨μˆ˜μ— λ„˜κ²¨μ£Όκ³  2초 ν›„ result2 λ³€μˆ˜μ— 리턴값을 ν• λ‹Ήν•œλ‹€
  • 이후 λ™μΌν•œ 둜직이며 await ꡬ문이 λλ‚˜λ©΄ result3둜 ν• λ‹Ήλœ 값을 console.log()둜 찍고 μ’…λ£ŒκΉŒμ§€ 찍고 μ’…λ£Œλœλ‹€.

πŸ“Œ Promise.all

  • async_await κ΅¬λ¬Έμ—μ„œλ„ Promise.all을 μ‚¬μš© ν•  수 μžˆλ‹€.
  • λ§ˆμ°¬κ°€μ§€λ‘œ λ°°μ—΄λ‘œ λ°›μ•„ λ°˜ν™˜ν•œλ‹€.
profile
ν’€μŠ€νƒ 개발자 지망생 (React, Node.js, AWS, Git, Github, Github Action, Docker)

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보