Input + Output = True
์๋ฐ์คํฌ๋ฆฝํธ Promise async await ์ค๋ช ๋ฐ ์์ ๋ณธ๋ฌธ
์๋ฐ์คํฌ๋ฆฝํธ Promise async await ์ค๋ช ๋ฐ ์์
IOTrue 2023. 3. 21. 17:07๐์๋ฐ์คํฌ๋ฆฝํธ Promise async await ์ค๋ช ๋ฐ ์์
โ JavaScript Promise ๋?
JavaScript Promise๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๋ค.
์ด๋ค ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ๊ทธ ์์ ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์ฆ, Promise๋ ๋น๋๊ธฐ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Promise๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
- Promise์ ์ํ๋ ๋๊ธฐ(Pending), ์ดํ(Fulfilled), ๊ฑฐ๋ถ(Rejected) ์ธ ๊ฐ์ง ์ํ ์ค ํ๋๋ฅผ ๊ฐ๋๋ค.
- Promise๋ ๋จ ํ ๋ฒ๋ง ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
Promise๋ ๋๊ธฐ(Pending) ์ํ์์ ์์ํด ์ดํ(Fulfilled) ๋๋ ๊ฑฐ๋ถ(Rejected) ์ํ ์ค ํ๋๋ก ๋ณ๊ฒฝ๋๋ค.
์ดํ ์ํ๋ Promise๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์์ ๋ํ๋ด๋ฉฐ, ๊ฑฐ๋ถ ์ํ๋ Promise์ ์คํจ๋ฅผ ๋ํ๋ด๊ณ
์คํ ๊ฒฐ๊ณผ๋ก ์ธํด Promise์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, Promise ๊ฐ์ฒด๋ ๊ทธ ์ํ๋ฅผ ์ ์งํ๋ค.
์ฆ, ์ดํ ๋๋ ๊ฑฐ๋ถ ์ํ์ ๋๋ฌํ๋ฉด ํด๋น ์ํ๋ฅผ ์ ์งํ๋ฉฐ, ์ด๋ ๊ฒ ๋ฐํ๋ ์ํ๋ ๋ ์ด์ ๋ณ๊ฒฝํ ์ ์๋ค.
Promise๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ์์ผ๋ก ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์
์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋๊ณ , ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ค๋ฅ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
promise ์ฌ์ฉ ์์
const status = true
const promise = new Promise((resolve, reject) => {
if (status) {
resolve('์ฑ๊ณต')
} else {
reject('์คํจ')
}
});
promise
.then((res) => { //์ฑ๊ณต ์คํ์ฝ๋
console.log(res);
})
.catch((error) => { //์คํจ ์คํ์ฝ๋
console.log(error);
});
์กฐ๊ฑด(status ๊ฐ)์ด ์ฐธ์ด๋ฉด resolve(์ฑ๊ณต) ๋ฅผ ํธ์ถํ๊ณ , ์๋๋ฉด reject(์คํจ) ๋ฅผ ํธ์ถํ๋ค.
resolve ๋ฐํ ๊ฐ์ then()์ ํตํด ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํ ๋ฐ์ ์ ์๊ณ
reject์ ๋ฐํ ๊ฐ์ catch() ๋ฅผ ํตํด ๋ฐํ ๋ฐ์ ์ ์๋ค.
then()๊ณผ catch()์ ์ฒด์ด๋์ ํตํด ๋น๋๊ธฐ ๋ก์ง์ ์ฑ๊ณต ์ฌ๋ถ์ ๋ฐ๋ฅธ ๋ถ๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
โ async / await ๋?
callback ํจ์๋ Promise์ ๋จ์ ์ ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋ ์ฝ๋๊ฐ ๋์ฌ ์ ์๊ณ
์ฝ๋ฐฑ ์ง์ฅ, then()์ง์ฅ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
async/await๋ ๊ฐ์ฅ ์ต๊ทผ์ ๋์จ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฌธ๋ฒ์ผ๋ก callback ์ด๋ Promise์ ์ด๋ฌํ ๋จ์ ์ ํด์ํ๊ณ ์ ๋ง๋ค์ด์ก๋ค.
async/await๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ ํ๋์ด์ผ ํ๋ ์กฐ๊ฑด์ด ์๋๋ฐ, await๋ async ํจ์ ์์์๋ง ๋์ํ๋ค.
async/await ์ฌ์ฉ ์์
(async () => {
const status = true;
const promise = new Promise((resolve, reject) => {
if (status) {
resolve('์ฑ๊ณต');
} else {
reject('์คํจ');
}
});
try {
const result = await promise //await ๋ฅผ ํตํด Promise ๋ฐํ ๊ฐ์ ๋ฐ์ ์ฌ ์ ์๋ค.
console.log(result)
} catch (error) {
console.log(error)
}
})();
๋๋
async function callAsync() {
try{
const data = await fetch('api') //1. fetch ์คํ ํ
if(data !== undefined) { //2. ์ด ์ฝ๋๊ฐ ์คํ๋๋ค
console.log(data);
}
} catch (error) { //์๋ฌ ํธ๋ค๋ง
console.log(error)
}
}
callAsync()
์ฆ, await๋ ์ด๋ ํ ์ฝ๋์ ์คํ์ด ์๋ฃ๋๊ธฐ๊น์ง๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๊ฒ ํด์ค๋ค.
๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์ฃผ์ํ ์ ์ async/await์ Promise์๋ ๋ค๋ฅด๊ฒ ์๋ฌ๋ฅผ ํธ๋ค๋ง ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์
try/catch๋ฌธ์ ํ์ฉํด์ ์๋ฌ ํธ๋ค๋ง์ ํด์ผํ๋ค.
โ Promise async/await ์ฐจ์ด์
- ๊ฐ๋
์ฑ
- Promise๋ .then() ์ง์ฅ์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ์ฝ๋๊ฐ ๊ธธ์ด์ง์๋ก, async/await๋ฅผ ํ์ฉํ ์ฝ๋๊ฐ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
- async/await์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๊ณ , ์ฝ๋ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์๋ฌ ํธ๋ค๋ง
- Promise๋ฅผ ์ฌ์ฉํ ๋๋ .catch() ๋ฌธ์ ํตํด ์๋ฌ ํธ๋ค๋ง์ด ๊ฐ๋ฅํ๋ค.
- async/await์ ์๋ฌ ํธ๋ค๋ง ๊ธฐ๋ฅ์ด ์์ด์ try-catch() ๋ฌธ์ ํ์ฉํด์ผ ํ๋ค.
์ฐธ๊ณ
Promise : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise
'๐จFrontEnd > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
parameter์ argument์ ์ฐจ์ด (0) | 2023.03.28 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ๊ณผ TDZ (0) | 2023.03.28 |
์๋ฐ์คํฌ๋ฆฝํธ ์ผํญ์ฐ์ฐ์ ์ดํญ์ฐ์ฐ์(๋จ์ถํ๊ฐ) (0) | 2023.01.29 |
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์๋ฆฌ - ์ฑ๊ธ์ค๋ ๋ ๋น๋๊ธฐ (0) | 2023.01.05 |
์ต์ ๋ ์ฒด์ด๋์ด๋?. javascript optional chaining ?. (0) | 2023.01.04 |