
const pr = new Promise((resolve, reject) => { //code });ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ฐ, ์ธ์๋ resolve, reject์
resolve: ์ฑ๊ณตํ์ ๋ ์คํ๋๋ ํจ์
reject: ์คํจํ์ ๋ ์คํ๋๋ ํจ์
์ด๋ค ์ผ์ด ์๋ฃ๋ ์ดํ ์คํ๋๋ ํจ์: Callback

์ด๊ธฐ ์ํ
state: pending(๋๊ธฐ) result: undefined
resolve(value)๊ฐ ํธ์ถ๋๋ฉด(์ฑ๊ณต),
result๋ resolveํจ์๋ก ์ ๋ฌ๋ ๊ฐstate: fulfilled(์ดํ๋จ) result: value
reject(error)๊ฐ ํธ์ถ๋๋ฉด(์คํจ),
result๋ rejectํจ์๋ก ์ ๋ฌ๋ ์๋ฌstate: rejected(๊ฑฐ๋ถ๋จ) result: error
const pr = new Promise((resolve, reject) => { setTimeout(() => { resolve('OK') },3000) });์ ์ํ๋ ์ฑ๊ณตํ๋ฉด,
state: pending(๋๊ธฐ) result: undefined ์์, 3์ด ํ state: fulfilled(์ดํ๋จ) result: 'OK'
const pr = new Promise((resolve, reject) => { setTimeout(() => { reject(new Error('error')) },3000) });์ ์ํ๋ ์คํจํ๋ฉด,
state: pending(๋๊ธฐ) result: undefined ์์, 3์ด ํ state: rejected(๊ฑฐ๋ถ๋จ) result: error
const pr = new Promise((resolve, reject) => { setTimeout(() => { resolve('OK') },3000) }); pr.then( function(result){}, //์ดํ๋์์ ๋ ์คํ, result='OK' function(err){} //๊ฑฐ๋ถ๋์์ ๋, error์๋ err์ด ๋ค์ด์ด );
const pr = new Promise((resolve, reject) => { setTimeout(() => { resolve('OK') },3000) }); pr.then( function(result){ console.log(result + '๊ฐ์ง๋ฌ ๊ฐ์'); }, function(err){ console.log('๋ค์ ์ฃผ๋ฌธํด์ฃผ์ธ์'); } );
const pr = new Promise((resolve, reject) => { setTimeout(() => { resolve('OK') },3000) }); pr.then( function(result){} ).catch( function(err){} );๋๋ฒ์งธ๋ก ์ ๋ฌํ๋ ํจ์๋ฅผ catch ์์ผ๋ก ๋ฃ์ด์ค
๊ฐ๋ ์ฑ๋ ์ข๊ณ , ์ฒซ๋ฒ์งธ ํจ์์์์ ์๋ฌ๋ ์ก์์ค!
const pr = new Promise((resolve, reject) => { setTimeout(() => { resolve('OK') },3000) }); pr.then( function(result){} ).catch( function(err){} ).finally( function(){ console.log('--์ฃผ๋ฌธ ๋--') } );
const pr = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK')
},1000)
});
console.log('์์');
pr.then((result)=>{
console.log(result);
})
.catch((err) => {
console.log(err);
})
.finally(()=>
console.log('๋');
});
//์์ (1์ดํ) OK ๋
const pr = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('err'));
},1000)
});
console.log('์์');
pr.then((result)=>{
console.log(result);
})
.catch((err) => {
console.log(err);
})
.finally(()=>
console.log('๋');
});
//์์ (1์ดํ) err ๋
์ดํ, ๊ฑฐ๋ถ ์๊ด์์ด ๋์ด๋ผ๋ ๋ง์ ํญ์ ๋ธ
const f1 = (callback) => {
setTimeout(function() {
console.log('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
callback();
}, 1000);
};
const f2 = (callback) => {
setTimeout(function() {
console.log('2๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
callback();
}, 3000);
};
const f3 = (callback) => {
setTimeout(function() {
console.log('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
callback();
}, 2000);
};
console.log('์์')
f1(function(){
f2(function(){
f3(function(){
console.log('๋');
});
});
});
>depth๊ฐ ๊น์ด์ง๋ฉด์ callback์ ๊ณ์ ํธ์ถํด์ผํจ.
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('2๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
console.log('์์');
f1()
.then(res => f2(res))
.then(res => f3(res))
.then(res => console.log(res));
.catch(conole.log)
.finally(()=>{
console.log('๋');
});
promise๊ฐ ์ฐ๊ฒฐ, ์ฐ๊ฒฐ~ ๋๋ ๊ฒ: Promise Chaining
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
rej('xxx');
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
console.log('์์');
f1()
.then(res => f2(res))
.then(res => f3(res))
.then(res => console.log(res));
.catch(conole.log)
.finally(()=>{
console.log('๋');
});
2๋ฒ์ด ์คํจ๋ผ๋ฉด, 3๋ฒ์ ์คํ๋ถํฐ ์ํ๊ณ , finally๊ฐ ์คํ๋จ
๋ชจ๋ ํ๋ฒ์ ์คํ
๋ฐฐ์ด๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ํจ์ ์์ ์์ ์ด ๋ชจ๋ ์คํ๋์ด์ผ then์์๊ฐ ์คํ๋จ
๋ชจ๋ ์ดํ๋๋ฉด ๊ฐ์ด ์คํ๋จ
์๊ฐ ์ ์ฝ ๊ฐ๋ฅ!
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
rej('xxx');
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
//Promise.all
Promise.all([f1(), f2(), f3()]).
.then(res => {
console.log(res);
console.timeEnd('x'); // ๋๋ต ์ผ๋ง๋ ๊ฑธ๋ ธ๋ ์ง ๊ณ์ฐ
});
//["1๋ฒ ์ฃผ๋ฌธ ์๋ฃ", "2๋ฒ ์ฃผ๋ฌธ ์๋ฃ", "3๋ฒ ์ฃผ๋ฌธ ์๋ฃ"]
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
rej('xxx');
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
Promise.all([f1(), f2(), f3()]).
.then(res => {
console.log(res);
});
๐ง ์ด๋ค ๊ฐ๋ ์ป์ง ๋ชปํจ...!
ํ๋์ ์ ๋ณด๋ผ๋ ๋๋ฝ๋๋ฉด ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ์ง ์์
์ฆ, ๋ค ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์์ ์ ๋ณด์ฌ์ค ๋ ์ฌ์ฉ
Promise.all๊ณผ ๋์ผ,
race๋ ํ๋๋ผ๋ ์ผ๋ฑ์ผ๋ก ์๋ฃ๋๋ฉด ๋๋
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
rej('xxx');
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
//Promise.race
Promise.race([f1(), f2(), f3()]).
.then(res => {
console.log(res);
console.timeEnd('x'); // ๋๋ต ์ผ๋ง๋ ๊ฑธ๋ ธ๋ ์ง ๊ณ์ฐ
});
//"1๋ฒ ์ฃผ๋ฌธ ์๋ฃ"
๐ง 2๋ฒ์ด reject๋ผ๊ณ ํ์ง๋ง, ์ด๋ฏธ 1๋ฒ์ด ์๋ฃ๋์์ผ๋ฏ๋ก ๋ฌด์
์ฉ๋์ด ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๋๋ฐ ๊ทธ ์ค ํ๋๋ผ๋ ์๋ฃ๋๋ฉด ๊ทธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค ๋ ์ฌ์ฉ
const f1= () => {
return new Promise((res, rej) => {
setTimeout(()=>{
res('1๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 1000);
});
};
const f2= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
rej('xxx');
}, 3000);
});
};
const f3= (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(()=>{
res('3๋ฒ ์ฃผ๋ฌธ ์๋ฃ);
}, 2000);
});
};
//Promise.race
Promise.race([f1(), f2(), f3()]).
.then(res => {
console.log(res);
console.timeEnd('x'); // ๋๋ต ์ผ๋ง๋ ๊ฑธ๋ ธ๋ ์ง ๊ณ์ฐ
});
//"1๋ฒ ์ฃผ๋ฌธ ์๋ฃ"