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();
- 멍멍이 1초, 토끼 0.5초, 거북이 3초 순차대로 처리되고 있음.
- 위와 같이 동기적으로 처리하지 않고, 병렬적으로 함수를 호출하는 방법은 아래와 같음
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()]);
console.log(results);
}
process();
- Promise.all([... ]) 해당 키워드를 사용하면 안에 들어간 배열의 함수를 병렬적으로 호출할 수 있다.
- 이 중 하나라도 에러가 발생하면, 에러가 발생함
- 병렬적으로 실행되어서 대략 3초 걸림
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();
- 배열 비구조화 할당 문법을 사용하여 이렇게 result를 뽑을 수도 있다.
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([getDog(), getRabbit(), getTurtle()]);
console.log(first);
}
process();
- Promise.race()는 호출한 함수 중 가장 빨리 끝난 하나를 반환함.
- 따라서 500ms걸린 토끼가 반환되었음
- 가장 빨리 끝난 것이 에러일때 해당 것 에러로 간주함
728x90
반응형
'Language > JavaScript' 카테고리의 다른 글
async, await (0) | 2022.11.27 |
---|---|
Promise (0) | 2022.11.27 |
Hoisting (0) | 2022.11.27 |
Scope (0) | 2022.11.27 |
함수 인자에서 rest (0) | 2022.11.27 |