async/await ๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋น๊ต์ ์ฝ๊ณ ๋ช ํํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
promise ์ฌ์ฉ ํ๊ธฐ ์ (๋ฌธ์ ์ )
function fetchUser(){
// ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ 10์ด ์ ๋ ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์
return 'hyunho';
}
const user = fetchUser()
console.log(user)
- ์์์ฒ๋ผ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์
- ๋๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์, ์ฆ ํ์ค ํ์ค์ฉ ํ์ค์ด ๋๋์ผ ๊ทธ ๋ค์ ์ค๋ก ๋์ด ๊ฐ๋๋ค.
- fetchUser() ํจ์๊ฐ ์ ์ธ๋ ๊ณณ์ผ๋ก ๊ฐ์ ํจ์์ ์ฝ๋ ๋ธ๋ก์ ์คํํ๋๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ
- 10์ด๊ฐ ๊ฑธ๋ฆฌ๋๊น 10์ด๋์ ๋จธ๋ฌด๋ฅด๊ณ ์๊ณ , ๊ทธ๋ฆฌ๊ณ ๋์์ผ 'hyunho' ๊ฐ ๋ฆฌํด์ด ๋ฉ๋๋ค.
- ๊ฒฐ๋ก : ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ 10์ด๊ฐ ๊ฑธ๋ฆฌ๊ธฐ์ ๋ง์ฝ console.log(user) ๋ค๋ก
์ฝ๋๋ค์ด ๊ณ์ ๋๋ค๋ฉด 10์ด๊ฐ ๋๋ ๋ ๊น์ง ์คํ๋์ง ์๊ณ ๋๊ธฐํด์ผ ํฉ๋๋ค.
promise ์ฌ์ฉ
function fetchUser(){
// ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ 10์ด ์ ๋ ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์
return new Promise((resolve,reject)=>{
resolve('hyunho');
})
}
const user = fetchUser() // fetchUser๊ฐ promise ๋ฅผ ๋ฆฌํด
user.then(console.log)
async
- ์๋์ ์ผ๋ก ํจ์ ์์ ์๋ ์ฝ๋ ๋ธ๋ญ ๋ค์ด promise๋ก ๋ณํ์ด ๋ฉ๋๋ค.
- ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํจ์ ์์ async ํค์๋๋ฅผ ์ฐ๊ฒฐ ํฉ๋๋ค.
- async function fetchUser(){ // ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ 10์ด ์ ๋ ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์ return 'hyunho' } const user = fetchUser() user.then(console.log)
await
- ์๋ฐ์คํฌ๋ฆฝํธ๋ await ํค์๋๋ฅผ ๋ง๋๋ฉด, ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ async ๊ฐ ๋ถ์ ํจ์ ์์์๋ง ์ฌ์ฉํ ์ ์๊ณ , await ๋ค์ ๋ถ์ ์ฝ๋๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- async function ํจ์๋ช () { await ๋น๋๊ธฐ_์ฒ๋ฆฌ_๋ฉ์๋_๋ช (); }
await ์์
function delay(ms){
return new Promise(resolve => setTimeout(resolve,ms))
// ์ ํด์ง ms ๊ฐ ์ง๋๋ฉด resolve ๋ฆฌํด
}
async function getApple(){
await delay(1000) // delay๊ฐ ๋๋ ๋ ๊น์ง ์ฌ๊ธฐ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
return '๐'
}
async function getBanana(){
await delay(1000)
return '๐'
}
async function pick(){
const apple = await getApple(); // apple๋ฅผ ๋ฐ๊ณ
const banana = await getBanana(); // banana๋ฅผ ๋ฐ๊ณ
return `${apple} + ${banana}` // ๋ค ๋ฐ์ ํ ์คํ
}
// async / await ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ์กด์ promise ๋ง ์ด์ฉํ๋ ๊ฒฝ์ฐ
function pick(){
return getApple()
.then(apple => {
return getBanana()
.then(banana => `${apple} + ${banana}`)
})
}
์์ธ์ฒ๋ฆฌ ( try...catch )
function delay(ms){
return new Promise(resolve => setTimeout(resolve,ms))
// ์ ํด์ง ms ๊ฐ ์ง๋๋ฉด resolve ๋ฆฌํด
}
async function getApple(){
await delay(1000) // delay๊ฐ ๋๋ ๋ ๊น์ง ์ฌ๊ธฐ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
return '๐'
}
async function getBanana(){
await delay(1000)
return '๐'
}
async function pick(){
try{
const apple = await getApple(); // apple๋ฅผ ๋ฐ๊ณ
const banana = await getBanana(); // banana๋ฅผ ๋ฐ๊ณ
} catch(error) {
console.log(error)
}
return `${apple} + ${banana}` // ๋ค ๋ฐ์ ํ ์คํ
}
์ฐธ๊ณ
'๐ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
==(๋๋ฑ ์ฐ์ฐ์)์ ===(์ผ์น ์ฐ์ฐ์) (0) | 2022.11.17 |
---|---|
์๊ฒฉ๋ชจ๋(use strict) (0) | 2022.11.17 |
Promise (0) | 2022.11.17 |
AJAX (0) | 2022.11.17 |
ํด๋ก์ (closure) (0) | 2022.11.16 |