function run(ms){
return new Promise(resolve =>setTimeout(resolve, ms));
}
const getDog =async ()=>{
await run(1000);
return '๐ถ';
}
const getTiger =async ()=>{
await run(500);
return '๐ฏ';
}
const getRabbit =async ()=>{
await run(3000);
return '๐ฐ';
}
async function process(){
const dog = await getDog();
console.log(dog);
const tiger = await getTiger();
console.log(tiger);
const rabbit = await getRabbit();
console.log(rabbit);
}
process()
๐ถ
๐ฏ
๐ฐ
๐
๐ถ๋ -> ๐ฏ์์ ->๐ฏ๋-> ๐ฐ์์๋๋ ํ์์ผ๋ก ์งํ.
์ฆ ํ๊บผ๋ฒ์ ์งํ๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋์ฉ ์ฒ๋ฆฌ๋ฅผ ํจ.
๋ง์ฝ ์ฌ๋ฌ๊ฐ์Promise
๋ฅผ ๋์์ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด ?? =>Promise.all
์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ์!
function run(ms){
return new Promise(resolve =>setTimeout(resolve, ms));
}
const getDog =async ()=>{
await run(1000);
return '๐ถ';
}
const getTiger =async ()=>{
await run(500);
return '๐ฏ';
}
const getRabbit =async ()=>{
await run(3000);
return '๐ฐ';
}
async function process(){
const results = await Promise.all([getDog(),getTiger(),getRabbit()]);
console.log(results);
}
process()
["๐ถ", "๐ฏ", "๐ฐ"]
// ์ค์ ๊ฑธ๋ฆฐ ์๊ฐ : 3์ด
๐ ๋ฐฐ์ด ์์
Promise
(=getDog()
,getTiger()
,getRabbit()
)๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ ๋ฐฐ์ด์Promise.all
๋ก ๊ฐ์ธ์ค ๋ค ๊ทธ ์์await
๋ฅผ ๋ฃ์ด์ค๋ค!
๊ทธ๋ฌ๋ฉด ๋ชจ๋Promise
๋ค ๋ค ์์ํ๊ณ ๋์ ๋ชจ๋ ๋๋๋ฉด, ๋ฐํ๊ฐ์๋(=results
) ๊ฐ๊ฐ ๋๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค์ด๊ฐ ์๋ ๋ฐฐ์ด์ด ๋ฐํ๋๋ค!
function run(ms){
return new Promise(resolve =>setTimeout(resolve, ms));
}
const getDog =async ()=>{
await run(1000);
return '๐ถ';
}
const getTiger =async ()=>{
await run(500);
return '๐ฏ';
}
const getRabbit =async ()=>{
await run(3000);
return '๐ฐ';
}
async function process(){
const results = await Promise.all([getDog(),getTiger(),getRabbit()]);
const dog = results[0];
const tiger = results[1];
const rabbit = results[2];
console.log(dog);
console.log(tiger);
console.log(rabbit);
}
process()
๐ถ
๐ฏ
๐ฐ
// ๋ฐ๋ก๋ฐ๋ก ์ถ์ถ
๐
dog
-->getDog()
tiger
-->getTiger()
rabbit
-->getRabbit()
์ด๋ ๊ฒ ์์๋๋ก ๊ฐ๊ฒ๋จ~!
์์๋๋ก ํ ์ ๋ ์์ง๋ง โผ ๋ฐฐ์ด ๋น๊ตฌ์กฐํ ํ ๋น(๊ตฌ์กฐ ๋ถํด ๋ฌธ๋ฒ)์ ์ด์ฉํ๋ฉด ํจ์ฌ ๋ ๊น๋ํ๊ฒ ๊ฐ๋ฅ!
function run(ms){
return new Promise(resolve =>setTimeout(resolve, ms));
}
const getDog =async ()=>{
await run(1000);
return '๐ถ';
}
const getTiger =async ()=>{
await run(500);
return '๐ฏ';
}
const getRabbit =async ()=>{
await run(3000);
return '๐ฐ';
}
async function process(){
const [dog, tiger, rabbit] = await Promise.all([getDog(),getTiger(),getRabbit()]);
console.log(dog);
console.log(tiger);
console.log(rabbit);
}
process()
๐ถ
๐ฏ
๐ฐ
// ๋ฐ๋ก๋ฐ๋ก ์ถ์ถ
function run(ms){
return new Promise(resolve =>setTimeout(resolve, ms));
}
const getDog =async ()=>{
await run(1000);
return '๐ถ';
}
const getTiger =async ()=>{
await run(500);
return '๐ฏ';
}
const getRabbit =async ()=>{
await run(3000);
return '๐ฐ';
}
async function process(){
const first = await Promise.race([getDog(),getTiger(),getRabbit()]);
console.log(first);
}
process()
๐ฏ
๐
getTiger
=> 500ms๋ก ๊ฐ์ฅ๋นจ๋ผ์ ๐ฏ ์ถ๋ ฅ๋จ!
Promise.race
๋ ๋ฑ๋กํPromise
์ค์์ (getDog()
,getTiger()
,getRabbit()
) ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ ๊ฒ์ด ๊ฒฐ๊ณผ๋ฌผ์ด ๋จ!
๐
Promise.all
์์๋ ํ๋๋ผ๋ error๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒดPromise
๊ฐ error๊ฐ ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ!!!
์ฆ ํ๋๋ผ๋ error๊ฐ ๋ฐ์ํ์ ๋,try-catch
๋ฌธ์ ์ฌ์ฉํด์ error์ ์ก์ ์ ์์!(๋ค์์ผ๋ก ๋ชป๋์ด๊ฐ)
๐Promise.race
์์๋ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ ๊ฒ์ด error์ผ ๋์๋ง error๋ก ๊ฐ์ฃผ!!
๊ฐ์ฅ ๋นจ๋ฆฌ๋๋ ๊ฒ์ด ํํ error์ผ ๋์๋งtry-catch
๋ฌธ์ผ๋ก error์ก์ ์ ์๋น~~!