비동기 작업 문제 해결 방법 Callback, Promise, Async/Await.
2024. 11. 15. 21:58ㆍ정보처리,전산/NODEJS
반응형
비동기 작업 문제를 해결하는 세 가지 방법: Callback, Promise, Async/Await.
1. Callback 함수로 비동기 작업 해결
Callback은 함수의 인수로 다른 함수를 전달해, 작업 완료 후 호출된다.
function fetchData(callback) {
setTimeout(() => {
const success = true;
if (success) {
callback(null, '성공');
} else {
callback('실패', null);
}
}, 1000);
}
// 사용
fetchData((error, result) => {
if (error) {
console.log('에러 발생:', error);
} else {
console.log('결과:', result);
}
});
장점
- 간단하고 직관적.
단점
- Callback Hell: 여러 개의 비동기 작업을 중첩하면 코드가 복잡해지고 가독성이 떨어짐.
2. Promise로 비동기 작업 해결
Promise는 비동기 작업의 완료 또는 실패를 나타내는 객체이다. ES6(ES2015)부터 지원된다.
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve('성공');
} else {
reject('실패');
}
}, 1000);
});
}
// 사용
fetchData()
.then(result => console.log('결과:', result))
.catch(error => console.log('에러 발생:', error));
장점
- 가독성이 개선되고, 체이닝(then, catch)을 통해 비동기 작업 연결이 간단.
단점
- 코드가 길어질 경우 여전히 가독성이 떨어질 수 있음.
3. Async/Await으로 비동기 작업 해결
Async/Await은 ES7(ES2017)에서 도입되었다. Promise 기반 코드를 동기 코드처럼 작성할 수 있게 해준다.
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve('성공');
} else {
reject('실패');
}
}, 1000);
});
}
// 사용
async function executeAsyncTask() {
try {
const result = await fetchData();
console.log('결과:', result);
} catch (error) {
console.log('에러 발생:', error);
}
}
executeAsyncTask();
비교
가독성 | 낮음 (Callback Hell 가능) | 중간 (체이닝 가능) | 높음 (동기 코드처럼) |
에러 처리 | 복잡 (중첩된 에러 처리 필요) | 간단 (.catch 사용) | 간단 (try-catch 사용) |
복잡한 비동기 | 관리 어려움 | 체이닝으로 관리 가능 | 간결하게 관리 가능 |
결론
- Callback: 단순한 비동기 작업에 적합.
- Promise: 다중 비동기 작업이나 체이닝 작업에 적합.
- Async/Await: 가독성이 중요하고 복잡한 비동기 작업에 적합.
반응형
'정보처리,전산 > NODEJS' 카테고리의 다른 글
HTML 내에서 메뉴 클릭 이벤트를 처리 (0) | 2024.11.15 |
---|---|
Promise.race() 메서드 (0) | 2024.11.15 |
비동기 작업과 Event Loop (0) | 2024.11.15 |
전역 스코프와 지역 스코프 | Closuer (0) | 2024.11.15 |
Closure란? (0) | 2024.11.15 |