async/await
์ ECMAScript 2017(ES8)์ ์ถ๊ฐ๋ ์ฌํญ์ผ๋ก ๊ธฐ์กด ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจ์๋ค์ ๋จ์ ์ ๋ณด์ํ ์ ์๋ค. ๊ธฐ์ด์ ์ธ ์ฌ์ฉ๋ฐฉ๋ฒ์ function ์์ฒด๋ฅผย async
ย ํค์๋๋ฅผ ๋ถ์ฌ ์ ์ธํด์ฃผ๊ณ , ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ ๋ถ๋ถ ์์ await ํค์๋๋ฅผ ๋ถ์ด๋ฉด ๋์ด๋ค. ํ๊ฐ์ง ์ฃผ์ํ ์ ์ async/await์ await์ ๋ถ์ธ ๋ถ๋ถ์ด promise๋ฅผ ๋ฐํํ๋ฏ๋ก ์ด ์ญ์ promise ๋ฐฉ์์ ์ด์ฉํ๋ค๋ ๊ฒ์ด๋ค.
keyword | description |
---|---|
async | function์ ์ ์ธํด์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ ํจ์๋ก, Promise๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ |
await | async function์ผ๋ก ์ ์ธ๋ ์ฝ๋ ์์์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์ |
await ํค์๋๋ async ํจ์์์๋ง ์ ํจํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผํ๋ค. async ํจ์์ ๋ณธ๋ฌธ ์ธ๋ถ์์ ์ฌ์ฉํ๋ฉด SyntaxError๊ฐ ๋ฐ์ํ๋ค.
Promise๋ฅผ then()๊ณผ catch()๋ฅผ ๋ค๋ค๋ ๊ตฌ๋ฌธ๊ณผ ๋น๊ตํ๋ฉด์ ์์๋ณด์.
function test1() {
fetch('...url...')
.then(response => {
//do something
})
.catch(error => {
//handle error
});
}
async function test2() {
try{
const response = await fetch('...url...');
// do something
} catch (error) {
// handle error
}
}
ํจ์ ์์ async๋ฅผ ์ ์ธํ๊ณ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ตฌ๋ฌธ์ await๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ฉด, then()์ฒ๋ฆฌ ๋์ ์ย await
ย ๊ตฌ๋ฌธ์ผ๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅํ๊ณ , catch()์ฒ๋ฆฌ๋ย try...catch
ย ๊ตฌ๋ฌธ์ ํตํด ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ค.
Promise Part์์ ๋ค๋ค๋ ์์ ๋ฅผ async await์ผ๋ก ํํํด๋ณด์.
const movieAPI = "<https://movieapi.com/data>";
const tvAPI = "<https://tvapi.com/data>";
const getData = async () => {
const movieData = await fetch.then(res => resp.json());
const tvData = await fetch.then(res => resp.json());
return {
movies: movieData,
tvs: tvData
}
}
์๋ ์ฝ๋๋ ๊ฐ๊ฐ ํ๋ก๋ฏธ์ค ์ฒด์ด๋๊ณผ async await์ผ๋ก ๋ค๋ฃฌ ์์ ์ด๋ค.
function test1() {
return doSomethingAsync()
.then(foo => doAsync1(foo))
.then(bar => doAsync2(bar))
.then(baz => doAsyncLast(baz))
}
async function test2() {
const foo = await doSomethingAsync();
const bar = await doAsync1(foo);
const baz = await doAsync2(bar);
await doAsyncLast(baz);
}
์ผ๋จ ํํ๋ค async await์ด ์ข๋ค๊ณ ํ๋ ์ด์ ๋ ๋๊ธฐํ ํจ์ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ์น์ํ ํํ๋ก ์์ฑ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๋ ์ฝ๋์์ foo๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์. then๊ณผ catch๋ฅผ ํตํด ๋ค๋ฃฌ ์์์ ์์๋ ํด๋น ๊ตฌ๋ฌธ์ด ๋๋๋ ์๊ฐ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋์ด๋์ง๋ง, async await๋ฅผ ๋ค๋ฃฌ ์์ ์์๋ ์ฝ๋ ์ด๋ ๊ตฌ๋ฌธ์์๋ ๋ค์ ์ฌ์ฉ(์ค์ ๋ก ์ฐ์ผ ๊ฒฝ์ฐ๊ฐ ์ ํ ์์๋์๋)๋๋๊ฒ ๊ฐ๋ฅํด์ง๋ค.
async await์ ์ฐ๋ฉด์ ์ด๋ฏธ ์ฌ์ฉ์ด ๋๋ ๋ณ์๋ฅผ ๋ค์ ์ธ ์๋์๋ ์ํ๋ถ๋ด์ ๊ฐ์ง๊ฒ ๋ ๊ด์ ์์๋ย ํ๋ก๋ฏธ์ค ์ฒด์ด๋
๋ฐฉ์์ด ๋ ์ข์ ์ฝ๋๋ผ๊ณ ๋งํ ์ ์๋ค.
ํ๋ก๋ฏธ์ค ์ฒด์ด๋๋ฐฉ์๊ณผ async await๋ฐฉ์์ ํ๋ก๊ทธ๋จ ์์ฑํ๋ ๊ตฌ์กฐ๋ ์์์๋ ์ดํด๋ณด์๋ฏ์ด ์์ ๋ค๋ฅด๋ค. fetch API๋ฅผ ์์๋ก ๋ค์ด๋ณด์.
await fecth(url);