์์ฑ๋ ์งํ์ ํ๋ก๋ฏธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก pending ์ํ์ด๋ค. ์ดํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋๋ฉด ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ํ๋ก๋ฏธ์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค.
์ฑ๊ณตโ resolve ํจ์๋ฅผ ํธ์ถํด ํ๋ก๋ฏธ์ค๋ฅผ fullfileld ์ํ๋ก ๋ณ๊ฒฝ
์คํจโ reject ํจ์๋ฅผ ํธ์ถํด rejected ์ํ๋ก ๋ณ๊ฒฝ
ํ์๋ฉ์๋ then(fullfilled) . catch( rejected) , finally(ํ ๋ฒ๋ง..) ๋ฑ. ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ํ๊ฐ ๋ณํ๋ฉด ํ์ ์ฒ๋ฆฌ ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌํ ์ฝ๋ฐฑํจ์๊ฐ ์ ํ์ ์ผ๋ก ํธ์ถ ๋จ. ์ด๋ ์ฝ๋ฐฑํจ์์ ํ๋ก๋ฏธ์ค์ ๊ฒฐ๊ณผ๊ฐ ์ธ์๋ก ์ ๋ฌ๋๋ค. ๋ชจ๋ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ฉฐ ๋น๋๊ธฐ๋ก ๋์ํ๋ค. promise ๋ฅผ ๋ฐํํ๊ธฐ๋๋ฌธ์ chaining ์ด ๊ฐ๋ฅํ๋ค.
get, post, delete ..
patch โ ๊ฐ์ฒดํํ๊ฐ ์์๋ ๊ทธ ์ผ๋ถ๋ถ๋ง ์์ ํ ๋.
put โ ๊ฐ์ฒด๋ฅผ ์์ ํ ๋์ฒดํ ๋ ..
xhr์ ์ด๋ฒคํธํธ๋ค๋ฌ, onload ๋ฉ์๋๊ฐ ๋น๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํ๋ฉด ํจ์ ๋ด๋ถ์ ๋น๋๊ธฐ๋ก ๋์ํ๋ ์ฝ๋๋ฌธ์ด ์๋ฃ๋์ง ์์๋๋ผ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ์ข ๋ฃ๋๋ค. (์ฆ, ์ฝ์คํ์ด ์ฆ์๋น์์ง๊ณ , ํ์คํฌ ํ์ ์ ์ฅ๋๋ค.) console.log ๋ ์ฝ์คํ์ ์ถ๊ฐ๋๊ณ , ์ฝ ์คํ์ ์๋ ์ปจํ ์คํธ๋ค์ด ์ ๋ถ ์คํ์ด ์๋ฃ๊ฐ๋๊ณ ๋น์ด์ผ์ง๋ง(์ฝ์คํ์ 1๋ฒ์ 1๊ฐ์ฉ๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅ..) ์ด๋ฒคํธ ๋ฃจํ์ ์ํด์ ์ฝ ์คํ์ผ๋ก ํธ์๋์ด ์คํ๋๋ฏ๋ก getํจ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ console.log(todos)๊ฐ ์คํ๋์ด undefined๊ฐ ์ถ๋ ฅ๋๊ฒ ๋๋ค. console.log๊ฐ ์ฐํ๋ ์์ ๋ณด๋ค ๋จผ์ ์๋ฒ์์ ๊ฐ์ ์ ์ก๋ฐ์๋, ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ํ๋ค.
getํจ์ ํธ์ถ โ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ์คํฌ ํ ์ด๋ โ ํจ์ ์ข ๋ฃ โ ์ดํ ์ฝ๋๋ฌธ ์ฒ๋ฆฌ โ ํ์คํฌ ํ์ ์ด๋ฒคํธ๊ฐ ์ฝ ์คํ์ผ๋ก ์ด๋ โ ์ด๋ฒคํธ ์ฝ๋ ์คํ (?)
์๋ฌ๋ ํธ์ถ์ ๋ฐฉํฅ์ผ๋ก ์ ํ๋๋๋ฐ setTimeout์ ๋น๋๊ธฐ ํจ์๋ก ํด๋น ํจ์๊ฐ ํธ์ถ๋จ๊ณผ ์ฆ์์ ์ข ๋ฃ๋๋ฉด์ ์ฝ ์คํ์์ ์ ๊ฑฐ๋๋ค. ์ฝ๋ฐฑ ํจ์๋ ํ์คํฌํ์ ์ ์ฅ๋์๋ค๊ฐ ์ฝ ์คํ์ด ๋น๋ฉด ์ด๋ฒคํธ ๋ฃจํ์ ์ํด์ ์คํ๋๋๋ฐ ์ด ๋ ์ฝ๋ฐฑ ํจ์์ ์คํ ์ปจํ์คํธ์ธ ํ์ ์ปจํ์คํธ์ ์๋ฌด๊ฒ๋ ์๊ธฐ ๋๋ฌธ์ ํธ์ถ์๊ฐ ์๋๊ฑธ๋ก ์ธ์๋์ด catch ๋ธ๋ก์์ ์ ์์ ์ผ๋ก ์๋ฌ๊ฐ ์กํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
//resolve๋ผ๋ ์ด๋ฆ์ ๋ค๋ฅธ๊ฑธ๋ก ๋ฐ๊พธ๋ฉด error ๋ฐ์
const req1 = () =>
new Promise(resolve => setTimeout(()=>resolve(1),1000));
const req2 = () =>
new Promise(resolve => setTimeout(()=>resolve(2),2000));
const req3 = () =>
new Promise(resolve => setTimeout(()=>resolve(3),3000));
//const ์ ์ธ์ ๋ณ์ ๊ฐ ์ฌํ ๋น ๋ถ๊ฐ
let resonse = [];
req1()
.then(data => {
resonse.push(data);
return req2();
})
.then(data => {
resonse.push(data);
return req3();
})
.then(data => {
resonse.push(data);
console.log(res);
})
.catch(console.error);
let resonse = [];
Promise.all([req1(), req2(), req3()])
.then(result => resonse = result)
.catch(console.error);