JavaScript async ์ await
async.awaitโโ
promise๋ฅผ ์ข ๋ ๊ฐํธํ๊ณ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค์ด์ฃผ๋๊ฒ
async
// async & await
// clear style of using promise :)
// promise๋ฅผ ์ข ๋ ๊น๋ํ๊ฒ ์ฌ์ฉํ๊ฒ ๋ง๋ค์ด์ค
// 1.async
async function fetchUser() {
//do network reqeust in 10 secs....
return 'ellie';
}
// async ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด promise๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ์ํํจ
const user = fetchUser();
user.then(console.log);
console.log(user);
await
// 2. await
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function getOrange () {
await delay(2000);
return '๐';
}
// await async๊ฐ ๋ถ์ด ์๋ ํจ์ ์์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
// ์ฒด์ด๋์ ์ํ๊ณ ๋๊ธฐ์ ์์ฝ๋๋ฅผ ์ ๋๊ฒ ์ฒ๋ผ ๋จ์ํ๊ฐ ๋จ
async function getBanana() {
await delay(1000);
return '๐';
}
// promise๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋๋ฌด ๋ง์ด ์ค์ฒฉ๋์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ฝ๋ฐฑ์ง์ฅ์ ๋ง๋ค์ด๋
// function pickFruits() {
// return getOrange()
// .then(orange => {
// return getBanana().then(banana => `${orange} + ${banana}`);
// });
// }
async function pickFruits() {
const orangePromise = getOrange(); //ํ๋ก๋ฏธ์ค๋ฅผ ๋ง๋๋ ์๊ฐ ์ฝ๋๋ธ๋ญ ์คํ
const bananaPromise = getBanana(); //ํ๋ก๋ฏธ์ค๋ฅผ ๋ง๋๋ ์๊ฐ ์ฝ๋๋ธ๋ญ ์คํ
const orange = await orangePromise; //๋๊ธฐ
const banana = await bananaPromise; //๋๊ธฐ
return `${orange} + ${banana}`
}
// ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋นํจ์จ์ ์ ์ค๋ ์ง 1์ด๊ธฐ๋ค๋ฆฌ๊ณ ๋ฐ๋๋ 1์ด๊ธฐ๋ค๋ฆฌ๊ณ ์์ฑํ๊ธฐ ๋๋ฌธ์ 2์ด๊ฐ ์์๋จ
// ๊ทธ๋์ ๋ฐ๋ก ์ค๋์ง,๋ฐ๋๋ Promise๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ๋์์ ์คํ๋๊ฒ ํจ (๋ณ๋ ฌ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ํ)
// ํ์ง๋ง ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋ ๋จ์ ์ด ์์
useful promise APIs
// useful promise APIs
// ์์ async function pickFruits() {} ์ฝ๋๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์ ๋ฆฌํด์ค
function pickAllFruits() {
return Promise.all([getOrange(), getBanana()])
.then(fruits => fruits.join(' + ')); // Orange , Banana ๋ฐ์์ง๋ฉด join
}
pickAllFruits().then(console.log) // ์ฑ๊ณตํ๋ฉด consle.log ์ถ๋ ฅ
// promise.all ์ ์ฌ์ฉํด ๊ฐํธํ๊ฒ ์ฒ๋ฆฌ
function pickOnlyOne() {
return Promise.race([getOrange(), getBanana]);
//์ด๋ค๊ณผ์ผ์ด๋ ์ฒซ๋ฒ์งธ ๊ณผ์ผ์ ๋ฐ๊ณ ์ถ๋ค. -> ๊ฐ์ฅ๋จผ์ ๋ฆฌํดํ๋ ๊ฐ๋ง ์ ๋ฌ๋จ (.race)
}
pickOnlyOne().then(console.log); // ๐
Last updated
Was this helpful?