반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- typeScript
- vue-cli
- csr
- ViTE
- SSR
- custom command
- vue3
- https
- CloudFlare
- svelte
- TLS
- caching
- msw
- Testing
- devtools
- JavaScript
- rendering
- 선택자
- api test
- web vital
- import.meta.env
- CSS
- 비동기
- http3
- Cypress
- e2e
- ts error
- aws
- vue
- QUIC
Archives
- Today
- Total
Develop Note by J.S.
[Javascript] Callback 본문
반응형
Callback이란?
Callback은 비동기 로직 처리 후의 동작 될 함수를 뜻합니다. 이후 실행 할 함수를 매개 변수로 전달하여 비동기 동작이 끝난 후 실행할 수 있습니다. 아래 Callback 사용에 대한 예제입니다.
function task1(a, cb) {
setTimeout(() => {
cb(a+1);
}, 2000);
}
function task2(a, cb) {
setTimeout(() => {
cb(a+1);
}, 2000);
}
function task3(a, cb) {
setTimeout(() => {
cb(a+1);
}, 2000);
}
task1(1, (a) => {
console.log("task1 : ", a);
task2(a, (b) => {
console.log("task2 : ", b);
task3(b, (c) => {
console.log("task3 : ", c);
});
});
});
task1부터 task3까지 차래대로 호출하며 두번째 전달인자는 익명함수를 전달하여 setTimeout(비동기 처리)이후 첫번째 전달인자를 +1 시키고 전달받은 익명함수에 다시a+1의 결과와 함께 다음 익명함수를 전달하고 있습니다. 설정한 2초 (2000ms) 단위로 console.log가 찍힐 것 입니다. 현재까지는 가독성에 크게 문제가 없는 상황입니다.
2. Callback + try Catch
function callback1(closer) {
closer(function (success) {
try {
if (success) {
console.log('2')
} else {
throw '에러 테스트';
}
} catch (error) {
console.log(error)
}
})
}
callback1(function (catchable) {
setTimeout(function () {
catchable(false);
}, 1000);
});
비동기 처리 사용 시 성공/실패에 대한 에러 처리 시 사용하는 기능으로 try catch 구문을 사용합니다. 상기 예제는 callback1() 호출 시 callback function을 넘겨주고, closer 내의 success가 다시 catchable로 전달이 되어 동작되는 형식입니다.
3. Callback 지옥
1번 예제보다 훨씬 더 잦은 Callback 처리를 나열 하다보면 가독성이 심각하게 떨어지는 경우가 발생하는데 이를 '콜백지옥' 이라고 부르기도 하죠.
//함수 정의
function step1(callback) {
... //비동기 처리
callback();
};
function step2(callback) {
... //비동기 처리
callback();
};
.....
//함수호출 시 전달..전달.. 전달......
step1(function (value1) {
step2(function (value2) {
step3(function (value3) {
step4(function (value4) {
step5(function (value5) {
step6(function (value6) {
// Do something with value6
});
});
});
});
});
});
예제와 같이 콜백지옥은 가독성이 떨어지기 때문에 ES6의 Promise 객체를 이용한 콜백지옥 해결방법에 대해서 다음 게시글에서 추가로 다뤄보겠습니다.
반응형
'Language > Javascript' 카테고리의 다른 글
[Javascript] 실행 컨텍스트 (0) | 2023.06.27 |
---|---|
[Javascript] 얕은복사, 깊은복사 (0) | 2023.06.20 |
[Javascript] Call by Value, Call by Reference, Call by Sharing (0) | 2023.06.20 |
[Javascript] Async, Await (0) | 2023.06.19 |
[Javascript] Promise (0) | 2023.06.19 |