์ ๋ฒ์๊ฐ์ ๋ฐฐ์ด Promise์ ์ด์ด ์๋ก์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฌธ๋ฒ์ธ async/await์ ๋ํด์ ์ง๊ณ ๋์ด๊ฐ๋ ค๊ณ ํฉ๋๋ค. Promise์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค๋ฉด ์ด ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!
JavaScript promise object
async function ํจ์๋ช
(){
...
}
sync function ํจ์๋ช
(){
๋ณ์๋ช
= await ํจ์๋ช
();
...
}
โ await ํค์๋๋ async ํจ์์์๋ง ์ ํจํฉ๋๋ค.์!! ํ๋ฒ ์์ ๋ฅผ ์ดํด๋ณผ๊น์? ์ฌ๊ธฐ setTimeout์ ์ด์ฉํ ๋น๋๊ธฐ ํจ์๊ฐ ๋๊ฐ ์์ต๋๋ค.
function getApple(){
setTimeout(()=>{
console.log('๐')
},3000);
}
function getBanana(){
setTimeout(()=>{
console.log('๐')
},1000);
}
getApple();
getBanana();
//console
//๐ 1์ด
//๐ 1+2์ด=3์ด
๋ค๋ค ์์ํ ๊ฒฐ๊ณผ๊ฒ ์ฃ ? banana๊ฐ ๋จผ์ ๋์ค๊ฒ ๋ฉ๋๋ค. getAppleํจ์๊ฐ ์์ ์๋๋ผ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๋๋ฉด์ delay์๊ฐ์ด ๋ ์งง์ ๋ฐ๋๋๊ฐ ๋จผ์ ์ถ๋ ฅ๋๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๋ง์ฝ, ๊ผญ ์ฌ๊ณผ๊ฐ ๋จผ์ ๋์ฐฉํ๊ธธ ์ํ๋ค๋ฉด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฐฉ์์ธ promise๋ฅผ ์ฌ์ฉํ์์ฃ ? ์ผ๋จ ๊ทธ๋ฐฉ์์ ์ด์ฉํด ์๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์์ต๋๋ค!
//promise ์ ์ฉ ํ
function getApple(){
return new Promise((resolve) => {
setTimeout(()=>{
resolve('๐');
},3000);
})
}
function getBanana(){
return new Promise((resolve) => {
setTimeout(()=>{
resolve('๐');
},1000);
})
}
//-------------์์ ํ ๋ถ๋ถโฌ
getApple()
.then((apple)=>{console.log(apple)})
.then(()=>{getBanana()
.then((banana)=>{console.log(banana)})})
//console์ฐฝ 4์ดํ ์ถ๋ ฅ
//๐ 3์ด
//๐ 3์ด+1์ด
promise๋ฅผ ํตํด ๋น๋๊ธฐ์ฒ๋ฆฌ! ์ฆ, ๋๊ธฐํํด์ค ์ํ๋ผ๊ณ ๋ณผ์ ์์ต๋๋ค. getAppleํจ์๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ ํ ๋ฆฌํด๊ฐ์ ์ถ๋ ฅํ๊ณ , ๊ทธ๋ฆฌ๊ณ ๋์ getBananaํจ์๋ฅผ ํธ์ถํ๊ณ ๋ฆฌํด๊ฐ์ ์ถ๋ ฅํ๊ฒ ๋๋ ์์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ, async๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค๋ฉด ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๊น์?
//async ์ ์ฉ ํ
//-------------์์ ๋ ๋ถ๋ถโฌ
async function fetchFruits(){
const apple = await getApple();
console.log(apple);
const banana = await getBanana();
console.log(banana);
return [apple, banana]
}
fetchFruits().then((fruits) => console.log(fruits));
//console
//๐ 3์ด
//๐ 3์ด+1์ด
//[ '๐', '๐' ] 3์ด+1์ด ๋ฐ๋๋ ์ถ๋ ฅํ ๋ฐ๋ก
์ด์๊ฐ์ด ์ฝ๋๋ฅผ ํ์ค ํ์ค ์์์ ์๋๋ก ์ฐจ๋ก๋๋ก ์คํํ๋ค๋ ๋๋์ ์ค๋๋ค!
์ฝ๋๊ฐ ์งง์์ ์ฒด๊ฐ์ด ์๋ ์ ์์ง๋ง, ๋ง์ฝ .then().then() ... .then().catch()์ผ๋ก ๊ธธ๊ฒ ๋์ฌ์ง๋ค๋ฉด, ์ฝ๋๊ฐ ๋ณต์กํด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
์ค๋ฌด์์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๊ธฐ๋ค๋ฆฌ๊ณ , ๋ฐ๊ณ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ค๋ฆฐ ํ ๋ฆฌํฐ๊ฐ์ ๊ฐ์ ธ์ ๊ฐ์ํํ๊ฑฐ๋ ๋ค๋ฅธ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ํ์ฉ๋๊ธฐ๋ ํฉ๋๋ค!
MDN
๋ฅ์ ์๊ฐ์ฌ๋ ๊ฐ์์๋ฃ