[Javascript] ๋น๋๊ธฐ ์ฒ๋ฆฌ(2): Promise โญ
// ์น API๋ฅผ ํฌํจํ์ฌ Promise๋ฅผ ๋ฐํํ๋ ํจ์ ์ ํด๋นํ๋ ๋ด์ฉ
/*์๋์๋ ๋ค๋ฅธ ์ฝ๋*/
let promise = axios.get("/api/classes")
// promise ๋ณ์์ Promise object๊ฐ ์ ์ฅ๋จ.
// pending ์ํ. (์ฑ๊ณต๋ ์คํจ๋ ์๋ ์ํ)
/*์ ์์ ์ธ ์ฝ๋1 - Promise*/
axios.get("/api/classes")
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// Promise Object์ .then()๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ
// Promise๊ฐ ์ฑ๊ณต์ ์ด๊ณ response๋ฅผ ๋ฐํํ ๋๋ง ์คํํ๋ค.
// fulfiled ์ํ. (์ฑ๊ณต์ ์ผ๋ก Promise๊ฐ ์ฒ๋ฆฌ๋์์ผ๋ฏ๋ก)
/*์ ์์ ์ธ ์ฝ๋2 - async/await */
async function fetchData(){
try{
let response=await axios.get('/api/classes');
if (!response.ok){
throw new Error(`HTTP ERROR:${response.status}`);
}
}catch(err){
console.log(err)
}
}
: pending ์ํ (์ฑ๊ณต๋ ์คํจ๋ ์๋ ์ํ)
: rejected ์ํ , ์ด๋ค ์ด์ ๋๋ฌธ์ rejected ๋์๋์ง ์๋ฌ ๋ฉ์์ง๋ฅผ ํฌํจํ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ(catch์์ ํ์ธ)
: resolved ์ํ (Promise ๊ฒฐ๊ณผ ๋ฐํ๋ง ๋๋ฉด, ๊ฒฐ๊ณผ ์๊ด์์ด)
: ์ฌ๋ฌ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌํ ๋
ํ๋ก๋ฏธ์ค๋ฅผ ์์๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
์ ๋ฌ๋ฐ์ ๋ชจ๋ ํ๋ก๋ฏธ์ค๊ฐ ๋ชจ๋ fulfilled ์ํ๊ฐ ๋๋ฉด ๋ชจ๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํด ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
์ฒซ๋ฒ์งธ promise๊ฐ resolve๋ค ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ์ ์ฅํด ๊ทธ๋ฐฐ์ด์ resolveํ๋ ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค. ์ฒ๋ฆฌ ์์๊ฐ ๋ณด์ฅ๋๋ค. ์ ๋ฌ๋ฐ์ ๋ฐฐ์ด์ ํ๋ก๋ฏธ์ค๊ฐ ํ๋๋ผ๋ rejected๊ฐ ๋๋ ๊ฒฝ์ฐ fulfilled ์ํ๊ฐ ๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ์ข ๋ฃํ๋ค. ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ดํฐ๋ฌ๋ธ์ ์์๊ฐ ํ๋ก๋ฏธ์ค๊ฐ ์๋ ๊ฒฝ์ฐ Promsise.resolve ๋ฉ์๋๋ฅผ ํตํด ํ๋ก๋ฏธ์ค๋ก ๋ํํ๋ค.
: ๊ฐ์ฅ ๋จผ์ fulfilled ์ํ๊ฐ ๋ ํ๋ก๋ฏธ์ค์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ๋ ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
์ ๋ฌ๋ฐ์ ๋ฐฐ์ด์ ํ๋ก๋ฏธ์ค๊ฐ ํ๋๋ผ๋ rejected๊ฐ ๋๋ ๊ฒฝ์ฐ fulfilled ์ํ๊ฐ ๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ์ข ๋ฃํ๋ค.
: ๋ชจ๋ settled์ํ(๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋ ์ํ, fulfilled or rejected)๊ฐ ๋๋ฉด, ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
fulfilled ; ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ํ๋ฅผ ๋ํ๋ด๋ status ํ๋กํผํฐ, ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ value ํ๋กํผํฐ {status: , value: }
rejected ; ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ํ๋ฅผ ๋ํ๋ด๋ status ํ๋กํผํฐ์ ์๋ฌ๋ฅผ ๋ํ๋ด๋ reason ํ๋กํผํฐ {status: , reason: }
ํ๋ก๋ฏธ์ค์ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์๋ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ ์ฅ๋๊ณ ,
๋ง์ดํฌ๋กํ์คํฌ ํ๋ ํ์คํฌ ํ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.
| [Javascript] ๋น๋๊ธฐ ์ฒ๋ฆฌ(4) : Loop ์ Async/Await (0) | 2021.08.18 |
|---|---|
| [Javascript] ๋น๋๊ธฐ ์ฒ๋ฆฌ(3): async/await (0) | 2021.08.17 |
| [Javascript] Event Loop์ Call Stack โญ (0) | 2021.06.22 |
| [React] Virtual-DOM, Reconciliation, fiber (0) | 2021.06.21 |
| [MongoDB] Model Relationships Between Documents (3) (0) | 2021.06.10 |