async/await : ES8(ECMAScript 2017)์ ๋์ ๋ ํค์๋๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ ์ฒ๋ฆฌ์ฒ๋ผ ๊ตฌํํ ์ ์๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ ๋๊ธฐ ์ฒ๋ฆฌ์ฒ๋ผ ๊ตฌํํ ๊น?
์ฌ๋ฌ๊ฐ์ง ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ์์ ๋ ๋ฌด์์ด ๋จผ์ ์คํ๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๊ธฐ์ฒ๋ฆฌ์ฒ๋ผ ๊ตฌํํ์ฌ ์์๋ฅผ ์ ํด์ค์ผ๋ก์จ ํท๊ฐ๋ฆฌ์ง ์๋๋ก ๋น๋๊ธฐํจ์๋ฅผ ์ฐจ๋ก๋ก ์คํํ๊ธฐ ์ํด์์ด๋ค.
ํ๋ก๋ฏธ์ค ํ์์ฒ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ
const h1 = document.querySelector( "h1" );
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then((res) => res.json())
.then((result) => (h1.textContent = JSON.stringify(result)));
async/await ์ฌ์ฉ
const h1 = document.querySelector("h1");
async function fetchtodo() {
const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const result = await response.json();
h1.textContent = JSON.stringify(result);
}
async/await๋ ๋ด๋ถ์ ์ผ๋ก ์ ๋ค๋ ์ดํฐ์ ๋น์ทํ๊ฒ ๊ตฌํํ์๋ค.
์ ๋ค๋ ์ดํฐ : ํจ์ํธ์ถ()์ด ํจ์๋ฅผ ์ ์ดํ ์ ์๋ ํจ์๊ฐ์ฒด
async/await๋ ํ๋ก๋ฏธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
async๋ ์ธ์ ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
async ํจ์๊ฐ ๋ช
์์ ์ผ๋ก ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ์ง ์๋๋ผ๋ ์๋ฌต์ ์ผ๋ก ๋ฐํ๊ฐ์ resolveํ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
await๋ ํ๋ก๋ฏธ์ค๊ฐ settled ๋ ์ํ(๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋ ์ํ)๊ฐ ๋ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ settled ์ํ๊ฐ ๋๋ฉด ํ๋ก๋ฏธ์ค๊ฐ resolveํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
await๋ ๋ฐ๋์ ํ๋ก๋ฏธ์ค ์์์ ์ฌ์ฉํด์ผํ๋ค.
async function foo() {
const a = await new Promise((res) => setTimeout(() => res(1), 3000));
const b = await new Promise((res) => setTimeout(() => res(2), 2000));
const c = await new Promise((res) => setTimeout(() => res(3), 1000));
console.log([a, b, c]); // ์ด 6์ด๊ฐ ์์๋๋ค.
}
foo();
์ด์ฒ๋ผ async/await๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ์ฒ๋ผ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋ค.