1. Promise all
1) Promise all을 사용하지 않은 경우
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const getDog = async () => {
await sleep(1000);
return '멍멍이';
};
const getRabbit = async () => {
await sleep(500);
return '토끼';
};
const getTurtle = async () => {
await sleep(3000);
return '거북이';
};
async function process() {
const dog = await getDog();
console.log(dog);
const rabbit = await getRabbit();
console.log(rabbit);
const turtle = await getTurtle();
console.log(turtle);
}
process();
현재 위 코드에서는 getDog 는 1초, getRabbit 은 0.5초, getTurtle 은 3초가 걸리고 있다. 이 함수들을 process 함수에서 연달아서 사용하게 되면서 process 함수가 실행되는 총 시간은 4.5초가 된다.
실행 결과
지금은 getDog -> getRabbit -> getTurtle 순서대로 실행이 되고 있는데 하나가 끝나야 다음 작업이 시작하고 있는데, 동시에 작업을 시작하고 싶다면 아래와 같이 Promise.all 을 사용해야한다.
2) Promise all을 사용한 경우
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const getDog = async () => {
await sleep(1000);
return '멍멍이';
};
const getRabbit = async () => {
await sleep(500);
return '토끼';
};
const getTurtle = async () => {
await sleep(3000);
return '거북이';
};
async function process() {
const results = await Promise.all([getDog(), getRabbit(), getTurtle()]); // Promise all 사용
console.log(results);
}
process();
실행 결과
리스트에 담겨서 동시에 출력 되는 것을 볼 수 있다.
만약에 여기서 아래와 같이 배열 비구조화 할당 문법을 사용한다면 각 결과값을 따로 따로 추출해서 조회 할 수 있다.
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const getDog = async () => {
await sleep(1000);
return '멍멍이';
};
const getRabbit = async () => {
await sleep(500);
return '토끼';
};
const getTurtle = async () => {
await sleep(3000);
return '거북이';
};
async function process() {
const [dog, rabbit, turtle] = await Promise.all([
// 객체 비구조화 할당 사용
getDog(),
getRabbit(),
getTurtle()
]);
console.log(dog);
console.log(rabbit);
console.log(turtle);
}
process();
실행 결과
2. Promise race
Promise race는 Promise.all 과 달리 여러개의 프로미스를 등록해서 실행했을 때 가장 빨리 끝난것 하나만의 결과값을 가져온다.
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const getDog = async () => {
await sleep(1000);
return '멍멍이';
};
const getRabbit = async () => {
await sleep(500);
return '토끼';
};
const getTurtle = async () => {
await sleep(3000);
return '거북이';
};
async function process() {
const first = await Promise.race([
// Promise.race 사용
getDog(),
getRabbit(),
getTurtle()
]);
console.log(first);
}
process();
실행 결과
'개발 공부한 내용 정리 > JavaScript' 카테고리의 다른 글
JavaScript- 모달 만들기 (0) | 2020.08.23 |
---|---|
JavaScript- 카운터 만들기 (0) | 2020.08.22 |
JavaScript- async / await (0) | 2020.08.20 |
JavaScript- Promise (0) | 2020.08.19 |
JavaScript- 비동기 처리 (0) | 2020.08.18 |