ํ๋ก๋ฏธ์ค๋ ์๋ฐ์คํฌ๋ฆฝ์ ๋ด์ฅ๋ ๋ด์ฅ๊ฐ์ฒด ์
๋๋ค
ํ๋ก๋ฏธ์ค ๊ฐ์ฒด์์๋ 2๊ฐ์ง๋ฅผ ํํ๋ฅผ ์ง๋๋๋ค.
1. ์ํ(state)
- pending : ์ํ์ค
- fullfilled : ์ฑ๊ณต์ ์๋ฃ
- rejected : ์คํจ
2. ํ๋ก๋์ - ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ ๊ณต์(์ฆ, Promise)
์ปจ์๋จธ - ์ฌ์ฉ์(์ฆ, ํธ์ถํ๋์ฌ๋)
ํ๋ก๋ฏธ์ค ์์ฑ
executor์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํด์ผ ํ๋ฉฐ executor์ฝ๋ฐฑํจ์๋ ๋ค์ resolveํจ์์ rejectํจ์๋ฅผ ๋ฐ์ต๋๋ค.
//๋งค๊ฐ๋ณ์๋ ์ปจ์๋จธ๊ฐ ๋ถ๋ช
์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ ๊ฑฐ์ผ!(๊ทธ ์ฝ๋ฐฑํจ์๋ก ๋ฆฌํดํด์ค๊ฒ!)
let promise = new Promise( (success, fail) => {
//producer ์
์ฅ์์ ์ฑ๊ณตํ์ ๋ ์ฑ๊ณต์ ์๋ฆฌ๋ ํจ์
success("success");
//producer ์
์ฅ์์ ์คํจํ์ ๋ ์คํจ๋ฅผ ์๋ฆฌ๋ ํจ์
//fail(new Error("fail"));
});
console.log(promise)
ํ๋ก๋ฏธ์ค์ ์ฌ์ฉ then(), catch()
- then์ promise๊ฐ ์ ์์ ์ผ๋ก ์คํ ๋๋ค๋ฉด, ๊ฒฐ๊ณผ๋ฅผ ์คํ์์ผ์ฃผ๋ ์ฝ๋ฐฑํจ์์ด๋ค.
- catch๋ promise๊ฐ ์คํจํ์ ๋, ๊ฒฐ๊ณผ๋ฅผ ์คํ์์ผ์ฃผ๋ ์ฝ๋ฐฑํจ์์ด๋ค.
//....์๋ต
promise.then( data => console.log(data) )
.catch( error => console.log(error) )
ํ๋ก๋ฏธ์ค์ ์ ์ฉ
๊ฒฐ๊ณผ๊ฐ ์ธ์ ๋์๊ฐ์ง ๋ชจ๋ฅด์ง๋ง, ๋ด๊ฐ ์ด๊ฒ์ ์๋ฃ๋๋ฉด Promise๋ฅผ ์ ๋ฌํด ์คํ ๋, ๋๋ thenํจ์๋ง ์ด์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํด!
ajax fetch()์ ๋ด๋ถ๋ชจ์ต ์์
//์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ๋์ด์๋ fetch๋ผ๊ณ ๊ฐ์
function myfetch(req) {
//๋น๋๊ธฐ์ ์คํ.. 10์ด..
return new Promise( (success, fail) => {
success("data....");
});
}
//fetch์ ๊ฐ์ ์คํ๊ตฌ์กฐ๋ฅผ ๋ณด์ธ๋ค.
myfetch("http://localhost:5502/~~~~~").then( response => console.log(response) );
Promise๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ async(์ด๊ฑฐ ๋น๋๊ธฐ์ผ)
async, await๊ท์น
-
์ด์ฑํฌ ํจ์ ์์์ ์ด์จ์์ ์ฌ์ฉํ๋ค
-
function ์์ async ํค์๋๋ฅผ ์ถ๊ฐ ํจ์๋ ์ธ์ ๋ ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํ ํฉ๋๋ค.
- ๋ฆฌํด์ด ํ๋ก๋ฏธ์ค๋ผ๋ฉด await์ ์ ์ฉํ๊ณ then์ ์ ์์จ ์ ์๋ค.
async๋ function์์ ์ ์ธํ๋ฉฐ, return๊ฐ์ ์๋์ผ๋ก Promise๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์ญํ ์ ํ๋ค.
์ฆ, ๋น๋๊ธฐ ํจ์์ ์คํ ํํ๋ก ๋ณ๊ฒฝํด์ค๋ค.
async function myfetch(req) {
//๋น๋๊ธฐ์ ์คํ.. 10์ด..
return "data....";
}
//var result = myfetch()
//console.log(result); //Promise
myfetch("http://localhost:5502/~~~~~").then( response => console.log(response) );
Promise๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ await(๊ธฐ๋ค๋ ค)
๋ฆฌํด์ด ํ๋ก๋ฏธ์ค๋ผ๋ฉด await์ ์ ์ฉํ๊ณ then์ ์ ์์จ ์ ์๋ค. (๋จ asyncํจ์ ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค)
(async function() {
let data = await myfetch();
console.log(data)
})();
async, await์ ์ฅ์
- ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ
- ์ด์ฑํฌ, ์ด์จ์์ ๋๊ธฐ์ ๋ฐฉ์(์์๋ฅผ) ๋ณด์ฅํ๋ค