자바스크립트는 비동기 프로그래밍을 지원하여 웹 애플리케이션의 성능과 응답성을 향상시킬 수 있습니다. 비동기 함수는 특정 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있도록 해줍니다. 그러나 때로는 여러 개의 비동기 함수를 동시에 실행해야 할 필요가 있을 수 있습니다. 이번 블로그 포스트에서는 자바스크립트에서 비동기 함수를 동시에 실행하는 방법에 대해 알아보겠습니다.
Promise.all을 사용한 동시 실행
ES6 이상의 자바스크립트 버전에서는 Promise.all
메서드를 사용하여 여러 개의 비동기 함수를 동시에 실행할 수 있습니다. Promise.all
은 여러 개의 프로미스 객체를 받아들여 모든 프로미스가 완료될 때까지 기다린 다음, 모든 프로미스의 결과를 배열로 반환합니다.
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2');
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 3');
}, 3000);
});
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results);
})
.catch((error) => {
console.error(error);
});
위의 예제에서는 promise1
, promise2
, promise3
이름으로 3개의 프로미스 객체를 생성하고, 각각 1초, 2초, 3초 후에 resolve
메서드를 호출하여 완료됨을 표시합니다. Promise.all
메서드에 이 프로미스 객체들을 전달하고, then
메서드를 사용하여 모든 프로미스가 완료된 후에 실행할 로직을 작성합니다. 위의 예제는 3초 후에 ["Promise 1", "Promise 2", "Promise 3"]
라는 결과를 출력할 것입니다.
async/await
을 사용한 동시 실행
ES2017 이상의 자바스크립트 버전에서는 async/await
구문을 사용하여 비동기 함수를 동기적으로 작성할 수 있습니다. await
키워드를 사용하여 비동기 함수가 완료될 때까지 기다릴 수 있고, Promise.all
과 함께 사용하여 동시에 여러 개의 비동기 함수를 실행할 수 있습니다.
const asyncFunction1 = async () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Async Function 1');
}, 1000);
});
};
const asyncFunction2 = async () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Async Function 2');
}, 2000);
});
};
const asyncFunction3 = async () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Async Function 3');
}, 3000);
});
};
const runAsyncFunctions = async () => {
try {
const results = await Promise.all([asyncFunction1(), asyncFunction2(), asyncFunction3()]);
console.log(results);
} catch (error) {
console.error(error);
}
};
runAsyncFunctions();
위의 예제에서는 asyncFunction1
, asyncFunction2
, asyncFunction3
이름으로 3개의 async
함수를 선언합니다. 각 함수는 setTimeout
함수를 사용하여 일정 시간 후에 완료됨을 표시합니다. 그리고 runAsyncFunctions
라는 async
함수를 정의하여 Promise.all
을 사용하여 동시 실행될 비동기 함수들을 호출하고, 결과를 출력합니다. 위의 예제는 3초 후에 ["Async Function 1", "Async Function 2", "Async Function 3"]
라는 결과를 출력할 것입니다.
결론
자바스크립트에서 여러 개의 비동기 함수를 동시에 실행하는 방법은 Promise.all
메서드나 async/await
구문을 사용하는 것입니다. 이를 통해 애플리케이션의 성능을 향상시킬 수 있고, 여러 개의 비동기 작업을 간편하게 관리할 수 있습니다. 비동기 함수를 적절히 활용하여 더욱 효율적인 웹 애플리케이션을 개발해보세요.