[Javascript] 콜백 지옥
콜백 지옥, callback hell, 콜백지옥, pyramid of doom, JavaScript callback hell, JS callback hell
- 콜백 지옥 (callback hell) 또는 둠 피라미드 (pyramid of doom): 순차 의존이 있는 비동기 작업을 콜백 으로 연결할 때 들여쓰기가 오른쪽으로 깊어지는 현상.
- 가독성 문제가 가장 먼저 보이지만, 더 큰 문제는 에러 처리 다. 매 단계마다
if (err) return을 빠뜨리면 그대로 무시되고,try/catch도 통하지 않는다.
// 콜백 지옥의 전형
loadUser(42, (err, user) => {
if (err) return console.error(err);
loadPosts(user.id, (err, posts) => {
if (err) return console.error(err);
loadComments(posts[0].id, (err, comments) => {
if (err) return console.error(err);
loadProfile(comments[0].authorId, (err, profile) => {
if (err) return console.error(err);
console.log(profile.name);
});
});
});
});
해결
- Promise + 체이닝:
.then의 평탄한 흐름으로 펴기 - async/await: 동기 코드처럼 작성
try {
const user = await loadUser(42);
const posts = await loadPosts(user.id);
const comments = await loadComments(posts[0].id);
const profile = await loadProfile(comments[0].authorId);
console.log(profile.name);
} catch (err) {
console.error(err);
}
참고
이 글의 용어 (3개)
- [Javascript] 콜백javascript
- - 콜백 (callback): 다른 함수의 인자로 넘겨져, 받은 쪽이 적절한 시점에 호출하는 함수. 일급 함수 () 가 있어야 가능한 패턴이라 JavaScript 에서는 자연스럽…
- [Javascript] async/awaitjavascript
- 정의 / 는 기반 비동기 코드를 마치 동기 코드처럼 쓸 수 있게 해주는 ES2017 의 문법 설탕. 본질은 Promise 그 자체, 문법만 다르다. 전체 동작 메커니즘은 글 참조…
- [Javascript] Promisejavascript
- 정의 Promise 는 미래의 어떤 시점에 결정될 값을 나타내는 객체다. ECMAScript 2015 (ES6) 에 도입되어 기반 비동기의 가독성과 에러 처리 문제를 해결했다. …
💬 댓글