๋น๋๊ธฐ ๊ฐ๋ : https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts
์ถ์ฒ : MDN Web Docs
์ด๋ค ์์ ์ ์ค๊ฐ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด. ๋ฏธ๋์ ์ด๋ค ์ข ๋ฅ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋จ์ ์ฝ์ํ๋ค.
Promise ๊ฐ์ฒด๋ ๋น๋๊ธฐ ์์
์ด ์ข
๋ฃ๋ ์ดํ์ ๊ฒฐ๊ณผ๊ฐ์ด๋ ์คํจ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
Promise๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ๋ฉ์๋์์ ๋ง์น ๋๊ธฐ๋ฉ์๋์ฒ๋ผ ๊ฐ์ ๋ฐํํ ์ ์๋ค. ๋ค๋ง ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๊ฒ ์๋๋ผ promise๋ฅผ ๋ฐํํด์ ๋ฏธ๋์ ์ด๋ค ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.
1. pending : fulfilled๋๊ฑฐ๋ rejected๋์ง ์์ ์ด๊ธฐ ์ํ
2. fulfilled : ์ฐ์ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋จ
3. rejected : ์ฐ์ฐ์ด ์คํจํจ.
pending์ค์ธ promise๋ ๊ฐ๊ณผ ํจ๊ป fulfilled๋ ์๋ ์๊ณ , ์ค๋ฅ๋ก ์ธํด rejected๋ ์๋ ์๋ค.
//์ ํ๋ก๋ฏธ์ค ์์ฑ
let myFirstPromise = new Promise(
//์คํํจ์๋ promsie๋ฅผ resolveํ๊ฑฐ๋ rejectํ ์ ์๋ค.
(resolve, reject) => {
//๋น๋๊ธฐ ์ฝ๋์ฒ๋ผ ๋ณด์ด๊ธฐ ์ํด setTimeout ์ฌ์ฉ
setTimeout(function(){
resolve("Success!"); // Yay! Everything went well!
}, 250);
});
//promise๋ฅผ fulfilledํ์๋ ํ ์ผ์ then()์ผ๋ก ์ ์, ๊ฑฐ๋ถ๋์์๋ ํ ์ผ์ catch()๋ก ์ ์
myFirstPromise.then(
//์ดํ ๊ฐ ์์ฑ
(successMessage) => {
console.log("Yay! " + successMessage);
})
.catch(
//๊ฑฐ๋ถ ์ด์ ๊ธฐ๋ก
function(reason){
console.log('์ฌ๊ธฐ์ ๊ฑฐ๋ถ๋ promise('+reason+')๋ฅผ ์ฒ๋ฆฌํ์ธ์.');
});
}
myPromise
.then(response => {
doSomething(response);
})
.catch(e => {
returnError(e);
})
.finally(() => {
runFinalCode();
});
function()์์ async
๋ฅผ ์ถ๊ฐ -> await
๊ฐ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์.
async function hello() { return "Hello" };
hello(); //promise๋ฅผ ๋ฐํ.
hello().then((value)=>console.log(value));
async๋ฅผ ์ฌ์ฉํ๋ฉด Promise๋ฅผ ๋ฐํํ๊ฒ ํ๋ค.
async function hello() {
return greeting = await Promise.resolve("Hello");
};
hello().then(alert);
await๋ async ํจ์ ์์์๋ง ์ฌ์ฉ๊ฐ๋ฅ.
.then()
๋ธ๋ญ ๋์ ๋ฉ์๋ ํธ์ถ ์ ์ await
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋น.
await
๋ ์ด ๋ผ์ธ์์ ์ผ์์ค์งํ์ฌ ๋น๋๊ธฐ ํจ์ ํธ์ถ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒํ๋ค.
fulfilled๋ promise์์ ๋ฐํ๋ ์๋ต์ greeting
๋ณ์์ ํ ๋น๋๋ค.
try...catch
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ค๋ฅ ์ฒ๋ฆฌ
async function myFetch() {
try {
let response = await fetch('coffee.jpg');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
let myBlob = await response.blob();
let objectURL = URL.createObjectURL(myBlob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);
} catch(e) {
console.log(e);
}
}
myFetch();