03. async/await
async/await
async/await ๋ฌธ๋ฒ์ ES8์ ํด๋นํ๋ ๋ฌธ๋ฒ์ผ๋ก์, Promise ๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ฌ์ฉ ํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์์๋ด ์๋ค.
const sleep = (ms) => {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function process() {
    console.log('์๋
ํ์ธ์!');
    await sleep(1000);
    console.log('๋ฐ๊ฐ์ต๋๋ค.!');
}
process();// ๊ฒฐ๊ณผ)
์๋
ํ์ธ์!
๋ฐ๊ฐ์ต๋๋ค.!async/await ๋ฌธ๋ฒ์ ์ฌ์ฉํ  ๋์๋, ํจ์๋ฅผ ์ ์ธ ํ  ๋ ํจ์์ ์๋ถ๋ถ์ async ํค์๋๋ฅผ ๋ถ์ฌ์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ  Promise ์ ์๋ถ๋ถ์ await ์ ๋ฃ์ด์ฃผ๋ฉด ํด๋น ํ๋ก๋ฏธ์ค๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์์
์ ์ํ ํ  ์ ์์ต๋๋ค.
์ ์ฝ๋์์๋ sleep ์ด๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ค ์๊ฐ ๋งํผ ๊ธฐ๋ค๋ฆฌ๋ Promise ๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ process ํจ์์์ ์ฌ์ฉํด์ฃผ์์ต๋๋ค.
ํจ์์์ async ๋ฅผ ์ฌ์ฉํ๋ฉด, ํด๋น ํจ์๋ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก Promise ๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑ ํ  ์ ์์ต๋๋ค.
const sleep = (ms) => {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function process() {
    console.log('์๋
ํ์ธ์!');
    await sleep(1000);
    console.log('๋ฐ๊ฐ์ต๋๋ค.!');
}
process().then(() => {
    console.log('์์
 ๋๋ฌ์ด์!')
});// ๊ฒฐ๊ณผ)
์๋
ํ์ธ์!
๋ฐ๊ฐ์ต๋๋ค.!
์์
 ๋๋ฌ์ด์!async ํจ์์์ ์๋ฌ๋ฅผ ๋ฐ์ ์ํฌ๋์๋ throw ๋ฅผ ์ฌ์ฉํ๊ณ , ์๋ฌ๋ฅผ ์ก์๋ผ ๋์๋ try/catch ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
async function errorMake() {
    await sleep(3000);
    const error = new Error();
    throw error;
};
async function process() {
  try {
    await errorMake();
  } catch (e) {
    console.log('then error : ', e)   // ์ฌ๊ธฐ์ e๋ ์์ throw error;๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.!!
  }
}
process();// ๊ฒฐ๊ณผ)
then error : errorEX1) 
new Promise ๋ก ์ ์ ํ๋ ์ฝ๋ 
function a(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() { // ์ฌ๊ธฐ์ setTimeout ํ๊ฒ์ ์๋ฒ์์ ํต์ ์์ ์๊ฐ์ ๊ฑธ๋ฆฐ๋ค๋ ๊ฐ์ ํด์ ์ด๋ฏธ๋ฅผ setTimeoutํจ์๋ฅผ ์ฌ์ฉํ๊ฒ์
๋๋ค.
            resolve(value)
        },1000)
    })
}
function b(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {  // ์ฌ๊ธฐ์ setTimeout ํ๊ฒ์ ์๋ฒ์์ ํต์ ์์ ์๊ฐ์ ๊ฑธ๋ฆฐ๋ค๋ ๊ฐ์ ํด์ ์ด๋ฏธ๋ฅผ setTimeoutํจ์๋ฅผ ์ฌ์ฉํ๊ฒ์
๋๋ค.
            resolve(value)
        },1000)
    })
}
function c(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {  // ์ฌ๊ธฐ์ setTimeout ํ๊ฒ์ ์๋ฒ์์ ํต์ ์์ ์๊ฐ์ ๊ฑธ๋ฆฐ๋ค๋ ๊ฐ์ ํด์ ์ด๋ฏธ๋ฅผ setTimeoutํจ์๋ฅผ ์ฌ์ฉํ๊ฒ์
๋๋ค.
            resolve(value)
        },1000)
    })
}
function d(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {  // ์ฌ๊ธฐ์ setTimeout ํ๊ฒ์ ์๋ฒ์์ ํต์ ์์ ์๊ฐ์ ๊ฑธ๋ฆฐ๋ค๋ ๊ฐ์ ํด์ ์ด๋ฏธ๋ฅผ setTimeoutํจ์๋ฅผ ์ฌ์ฉํ๊ฒ์
๋๋ค.
            resolve(value)
        },1000)
    })
}
function test(value) {
    return new Promise((resolve, reject) => {
        if(false) { // ์ ์์ ์ผ๋ก ์๋ฒ์ ํต์ ๋ชปํ๋ฉด (์๋ฌ ๋๋ฉด) ์คํ๋ฉ๋๋ค.
            reject('Error') //reject('์ํ๋ ๋ฉ์ธ์ง ์์ฑ')
        }
        setTimeout(() => {  // ์ฌ๊ธฐ์ setTimeout ํ๊ฒ์ ์๋ฒ์์ ํต์ ์์ ์๊ฐ์ ๊ฑธ๋ฆฐ๋ค๋ ๊ฐ์ ํด์ ์ด๋ฏธ๋ฅผ setTimeoutํจ์๋ฅผ ์ฌ์ฉํ๊ฒ์
๋๋ค.
            resolve(value) 
        }, 1000);
    })
}then catch ์คํํ๋ ์ฝ๋
// then catch ์คํํ๋ ์ฝ๋
test('A').then((res) => {console.log(res)})
.then(() => b("B").then((res) => {console.log(res)}))
.then(() => c("C").then((res) => {console.log(res)}))
.then(() => d("D").then((res) => {console.log(res)}))
.catch((error) => {
    console.log(error)
    alert(error)
})
.finally(() => {
    console.log('done!!')
    alert('done!!')
})ES8๋ฒ์  async await ์คํํ๋ ์ฝ๋
// ES8๋ฒ์  async await ์คํํ๋ ์ฝ๋
async function asyncFunc() {
    try {
        const a0 = await test('A!')
        console.log(a0)
        const a1 = await a('A')
        console.log(a1)
        const b1 = await b('B')
        console.log(b1)
        const c1 = await c('C')
        console.log(c1)
        const d1 = await d('D')
        console.log(d1)
    } catch (error) {
        alert(error)
        console.log(error)
    } finally {
        console.log('done!!')
    }
}
asyncFunc()Last updated
Was this helpful?