๐ก
async,await๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ๋์ ํจํด์ด๋ค.
๊ธฐ์กด์ ๋ณต์กํํ๋ก๋ฏธ์ค ์ฒด์ธ์ ๊ฐ๊ฒฐํ๊ณ ๋๊ธฐ์ ์ธ ํ๋ฆ์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋์์ค๋ค.
Promise๋ ๋น๋๊ธฐ ์์
์ ์ต์ข
์๋ฃ ๋๋ ์คํจ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
๋น๋๊ธฐ ์์
์ด ์ํ๋ ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ๋์ค์ ๋ฐ๊ธฐ ์ํ ์ฝ์์ผ๋ก ์ฌ์ฉ
์ฃผ๋ก ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์ค๋ HTTP ์์ฒญ ์ฒ๋ฆฌ์ ์ฌ์ฉ
ํ์ผ ์์คํ
์์
์ ๋น๋กฏํ ๋ค์ํ ๋น๋๊ธฐ ์์
์ ํ์ฉ
Promise ๋ ์ธ๊ฐ์ง ์ํ ์ค ํ๋๋ฅผ ๊ฐ์ง๋ค.
Promise ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด, ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฝ๋ฐฑํจ์๋ฅผ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ .then(),.catch() ๊ทธ๋ฆฌ๊ณ .finally() ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ฐ์์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ์ฝ๋ฐฑ ์ง์ฅ(Callback hell)์ ํผํ๊ณ ๊ฐ๋
์ฑ์ ๋์ธ๋ค.
const myPromise = new Promise(function(resolve, reject) {
// ๋น๋๊ธฐ ์์
์ ์ํํ๊ณ
if (/* ์์
์ฑ๊ณต */) {
resolve('Success!');
} else {
reject('Error!');
}
});
myPromise.then(function(value) {
// ์ฑ๊ณต(resolve)ํ ๊ฒฝ์ฐ ์ํ
console.log(value); // 'Success!'
}).catch(function(error) {
// ์คํจ(reject)ํ ๊ฒฝ์ฐ ์ํ
console.error(error); // 'Error!'
});
async ํจ์๋ async ํค์๋๋ฅผ ํจ์ ์ ์ธ ์์ ๋ถ์ฌ ์ ์.
๐ ์ด ํจ์๋ ํญ์ Promise๋ฅผ ๋ฐํํ๋ค.
async function fetchData() {
return 'Data loaded';
}
// ์๋ ์ฝ๋์ ๊ฐ์์.
// async function fetchData() {
// return Promise.resolve('Data loaded');
// }
fetchData().then(console.log); // 'Data loaded'
await ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ํจ์์ ์คํ์ ์ผ์์ ์ผ๋ก ์ค๋จํ๊ณ , ํ๋ก๋ฏธ์ค๊ฐ ํด๊ฒฐ๋๋ฉด ์๋์ผ๋ก ํจ์์ ์คํ์ ์ฌ๊ฐ
async function fetchData() {
try {
const data = await fetch('https://api.example.com/data');
const json = await data.json();
console.log(json);
} catch (error) {
console.error("Data loading failed", error);
}
}
fetchData();
await ์ฌ์ฉ ์์ด ํ๋ก๋ฏธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ฉด .then()๊ณผ .catch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋ฏธ์ค ์ฒด์ธ์ ๊ตฌ์ฑํด์ผํ๋ค.
๋ฐ๋ณต์ ์ธ depth ๋ง๋ค ๋ณต์กํ ์ฒด์ธ์ ๋ง๋ฆ
โด ์ฝ๋์ ๊ฐ๋
์ฑ ์ ํ / ์ ์ง๋ณด์ ๋์ด๋ ์์น
function fetchData() {
return fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Data loading failed", error));
}
fetchData();
๋น๋๊ธฐ๊ฐ ๋๋ฅผ ๊ดด๋กญํ๋ค.
์ญ์ ๋๊ธฐ์ฌ๋ ๋๋ผ์ฌ๋ ๐ฟ