[JavaScript] Promise ๊ธฐ์ด๐ค
Promise ๐ค
JavaScript์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ด์ฉํฉ๋๋ค.
ํ์ง๋ง ์ฝ๋๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ฝ๋ฐฑ ์ค์ฒฉ์ด ๋ง์์ง๊ณ
๊ทธ ๊ฒฐ๊ณผ, ์ฝ๋์ ๋ณต์ก์ฑ์ ๋์ด๋ ์ฝ๋ฐฑ ์ง์ฅ ๐์ ๋ง๋๊ฒ ๋ฉ๋๋ค.
a(function (resultA){
b(resultA,function (resultB){
c(resultB,function(resultC){
d(resultC,function(resultD){
e(resultD,function(resultE){
f(resultE,function(resultF){
console.log(resultF);
})
})
})
})
})
});
Promise ๊ธฐ์ด
์ด๋ฐ ์ํฉ์ ๊ทน๋ณตํ๊ธฐ ์ํด Promise ๋ผ๋ ํจํด์ด ๋ฑ์ฅํ์ต๋๋ค.
JavaScript์์ Promise๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ ์์
์ ๊ฒฐ๊ณผ(์ฑ๊ณต or ์คํจ)๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์
๋๋ค.
๋จ์ด์ ๋ป ๊ทธ๋๋ก ์ฌ์ฉ์์๊ฒ
"๋ฉ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๋๊น์ง ๊ธฐ๋ค๋ฆด๊ฒ, ์ฝ์ํ ๊ฒ"
๋ผ๋ ๋ป์ผ๋ก Promise๊ฐ ์๋๊ฐ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค..? ๐คทโโ๏ธ
๊ทธ๋ฆฌ๊ณ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒดํ ์ํจ๋ค๋ ์ ์ด Promise์ ํน์ง์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
Promise ์์
var ranTime = function (){
return new Promise(
// ์คํ ํจ์ (Executor)
function(resolve, reject){
setTimeout(() => {
var ran = Math.random() * 10;
if(ran >= 5){
resolve(ran);
}else{
reject("์คํจ!");
}
}, 1000);
})
}
ranTime()
.then(function(num){
// ์ฑ๊ณต์
console.log(num);
},function(text){
// ์คํจ์
console.log(text);
});
์ Promise ์ ์ธ๋ถ์์ Promise ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋๋ก ํจ์๋ก ๊ฐ์ธ๊ณ ์์ต๋๋ค.
Promise ๊ฐ์ฒด๋ ์ธ์๋ก ์คํ ํจ์(Executor)
๋ฅผ ๋ฐ์ต๋๋ค.
์คํ ํจ์(Executor)
๋ ๋น๋๊ธฐ ์์
์ด
- ์ฑ๊ณต > resolve ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- ์ค๋ฅ ๋ฐ์ > reject ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
๊ฒฐ๊ตญ Promise ๊ฐ์ฒด๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณต or ์คํจํ์๋์ง ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ต๋๋ค.
์ฝ์ ์ฐฝ์ ์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด
setTimeout ํจ์๋ก ์ธํดpending
์ด 1์ด ๋์ ์ ์ง ํ
์ ๊ฒฐ๊ณผ ๊ฐ์ด ํธ์ถ๋ฉ๋๋ค.
Promise ์ํ
then ๋ฉ์๋
ranTime()
.then(function(num){
//์ฑ๊ณต์
console.log(num);
},function(text){
//์คํจ์
console.log(text);
});
์ฌ์ฉ์๋ then ๋ฉ์๋
๋ฅผ ์ด์ฉํ์ฌ Promise ๊ฐ์ฒด์ ์ ์์ ์ธ ๋น๋๊ธฐ ์์
์ด ์ด๋ฃจ์ด ์ก๋์ง ํ์ธ ํ ์ ์์ต๋๋ค.
then ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ
์๋ ์ฑ๊ณต์ ํธ์ถํ ์ฝ๋ฐฑ ํจ์๋ฅผ,
๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ
์๋ ์คํจ์ ํธ์ถํ ์ฝ๋ฐฑํจ์๋ฅผ ์ ์ธํ๋ฉด Promise์ ์ํ์ ๋ฐ๋ผ ์ํํ๊ฒ ๋ฉ๋๋ค.
Promise Chaining
๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ฝ๋ฐฑ ํจ์์ ๋ฆฌํด ๊ฐ์ ์ด์ด ๋ฐ๋ then ๋ฉ์๋
๋ฅผ ์ด์ฉํ์ฌ
chaining
์ด ๊ฐ๋ฅํฉ๋๋ค.
Promise.then(function(a){
}).then(function(b){
}).then(function(c){
}).then(function(d){
}).then(function(e){
}).then(function(f){
console.log();
})
์์ ๊ฐ์ด ์ฝ๋ฐฑ ์ง์ฅ๋ณด๋ค ํจ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ต๊ทผ ๋ค์ด์๋ ์ฝ๋ฐฑ ํจ์์ Promise์ ๋จ์ ์ ๋ณด์ํ
async & await
๋น๋๊ธฐ์ ์ฒ๋ฆฌ ํจํด์ด ๋ฑ์ฅํ์ต๋๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([JavaScript] Promise ๊ธฐ์ด๐ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@kyoung-jnn/JavaScript-Promise-๊ธฐ์ด์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค