안녕하세요.
오늘은 콜백헬이 뭔지 알아보고 해결하기 위한 방법인 promis와 Async/await에 대해 알아보겠습니다.
1. 동기 vs 비동기
동기방식은 하난가 끝날 때까지 다음 작업을 수행할 수 없는 방식으로, 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것입니다.
비동기 방식은 요청과 결과가 한 자리에서 일어나지 않는 방식으로, 요청 후 응답을 기다리지 않고 다른 활동을 합니다.
2. 콜백 (Callback) 함수?
함수가 끝난 뒤 실행되는 함수로, 함수를 만들 때 parameter로 함수를 받아서 사용합니다.
3. 예시
console.log("1 start");
// cb: callback function
function login(id, pw, cb) {
setTimeout(() => {
console.log( '2 정보없음' );
cb(id);
}, 0);
}
const users = login("teamnova", "123", user => {
console.log('3 '+ user + "님 반갑습니다.");
});
console.log("4 finish");
4. 결과
1 start
4 finish
2 정보없음
3 teamnova님 반갑습니다.
1-2-3-4가 아닌 1-4-2-3 순으로 결과가 출력됩니다.
왜냐면 setTimeout()함수가 비동기함수이기 때문입니다.
login()함수가 비동기적으로 실행되기 때문에 4가 실행된 후에 3의 코드가 값을 반환하게 됩니다.
5. 예시
6. 결과
1 start
2 정보없음
3 teamnova님 반갑습니다.
4 finish
비동기 함수를 주석처리했더니 1-2-3-4순으로 출력이 됩니다.
7. 콜백 지옥(Callback Hell)?
콜백지옥이란 비동기 처리에 함수의 매개변수가 넘겨지는 콜백 함수가 반복되어 코드의 들여쓰기가 깊어지는 현상을 말합니다. 가독성이 떨어지고 코드 수정이 어렵다는 문제가 있습니다.
8. 예시
(1)
Start - 1초마다 출력(3개) - End
이렇게 출력되기를 원하지만 생각대로 안 됩니다.
(2)
콜백 안에 콜백 안에 콜백함수를 넣는 형태로 만들게 되었습니다.
콜백헬에 빠졌습니다.
(코드)
9. 해결방법 - (1)
promise 객체를 사용한다면 then()을 이용해서 기존의 중첩되는 구조를 피할 수 있다.
(코드)
10.
async/await를 사용해서 간단하게 코드를 작성할 수 있습니다.
(코드)
이상으로 콜백헬을 해결하기 위한 Promise와 Async/await 알아보기였습니다 :)
'Nodejs' 카테고리의 다른 글
[Nodejs] node-cron 사용해서 설정한 주기 마다 작업 실행하기 (0) | 2023.12.28 |
---|---|
[Nodejs] express에서 mongoose 사용해보기 (0) | 2023.12.19 |
[Node.js] 특정 확장자 파일만 필터링해서 불러오기 (0) | 2023.11.09 |
[Node.js] 대상 디렉토리 내의 모든 파일 읽어오기 (0) | 2023.10.28 |
[Node.js] dotenv을 사용하여 환경변수 설정하기 (0) | 2023.10.19 |