Promise
Promise๋ javascript์ ๋ด์ฅ๋์ด์๋ object๋ก, ์ด๋ฅผ ํตํด์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๋ค.
- ๋คํธ์ํฌํต์ ์ ํ๋ค๋์ง, ํ์ผ์ ์ฝ์ด์จ๋ค๋์ง ํ๋ ๋ฑ์ ๋ฌด๊ฑฐ์ด ์์ ์ ํ ๋๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก Promise๋ก ์ฒ๋ฆฌํ๋ค. ๋ฌด๊ฑฐ์ด ์์ ์ ์ฒ๋ฆฌํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์์ฒญํ์ง ์์๋๋ฐ๋ ์ผ์ด๋๋ ๋ถํ์ํ ๋คํธ์ํฌํต์ (promiseํจ์์ ์คํ)์ ๋ฐฉ์งํด์ผ ํ๋ค.
- new Promise๊ฐ ๋ง๋ค์ด์ง๋ ์๊ฐ, ํด๋น executor ํจ์๊ฐ ์๋์ผ๋ก ์คํ๋๋ฏ๋ก ์ฃผ์ํ์.
promise๋ ์๋ ๋ ๊ฐ์ง๋ฅผ ์ผ๋์ ๋๋ฉด ์ข๋ค.
1. State(์ํ)
process๊ฐ ๋ฌด๊ฑฐ์ด operation์ ์ํํ๊ณ ์๋์ง/์๋ฃ๋์๋ค๋ฉด ์ฑ๊ณตํ๋์ง/์คํจํ๋์ง์ ์ํ
- pending : operation์ ์ํ ์ค์ธ ์ํ
- fulfilled : operation์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ ์ํ
- rejected : ํ์ผ์ ์ฐพ์ ์ ์๊ฑฐ๋, ๋คํธ์ํฌ์ ๋ฌธ์ ๊ฐ ์๊ธด ๋ฑ ์คํจํ ์ํ
2. Producing
Producer(๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์ฌ๋)์ Consumer(๋ฐ์ดํฐ๋ฅผ ์๋น ํ๋ ์ฌ๋)์ ์ฐจ์ด
Producer
- resolve
const promise = new Promise((resolve, reject) => {
//doing some heavy work (network, read files)
console.log('doing something...');
setTimeout(() => {
resolve('Noran');
}, 2000);
})
- reject
const promise = new Promise((resolve, reject) => {
//doing some heavy work (network, read files)
console.log('doing something...');
setTimeout(() => {
reject(new Error('no network'));
}, 2000);
})
Consumer
- then
// ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ค๋ฉด
promise.then((value) => { //value๋ ์์ promiseํจ์์์ resolve๋ data
console.log(value);
})
//"Noran"
- catch ์ถ๊ฐ
// ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ค๋ฉด
promise
.then(value => { //value๋ ์์ promiseํจ์์์ resolve๋ data
console.log(value);
}) //then์ ๋๊ฐ์ promise๋ฅผ returnํ๋ค.
// reject๋์ด error๊ฐ ์ผ์ด๋๋ค๋ฉด
.catch(error => { //error๋ฅผ uncaught๊ฐ ์๋ ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ ์ ์๊ฒ
console.log(error);
});
//Error: no network
- finally ์ถ๊ฐ
// ์ ์์ ์ผ๋ก ์ํ์ด ๋๋ค๋ฉด
promise
.then(value => { //value๋ ์์ promiseํจ์์์ resolve๋ data
console.log(value);
}) //then์ ๋๊ฐ์ promise๋ฅผ returnํ๋ค.
// error๊ฐ ๋ฌ๋ค๋ฉด
.catch(error => { //error๋ฅผ uncaught๊ฐ ์๋ ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ ์ ์๊ฒ
console.log(error);
})
// ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๋ ๋ง์ง๋ง์ ์คํ๋๋ค
.finally(() => {
console.log('์ด์จ๋ ์คํ๋จ');
});
//Error: no network
//'์ด์ฉ๋ ์คํ๋จ'
์ถ์ฒ : ๋๋ฆผ์ฝ๋ฉ https://www.youtube.com/@dream-coding / MDN https://developer.mozilla.org/ko/