일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 동적 계획법
- 안드로이드
- 알고리즘
- LeetCode
- CS
- 자바
- Python
- Algorithm
- Graph
- 다이나믹 프로그래밍
- vscode
- DFS
- java
- TypeScript
- 프로그래머스
- BFS
- 백준
- 그레이들
- react
- Data Structure
- DP
- network
- VIM
- git
- Javascript
- Redux
- Database
- 리트코드
- frontend
- db
- Today
- Total
늘 겸손하게
JavaScript - 콜백 지옥 탈출 본문
콜백 함수 (Callback function)
자바스크립트에서는 함수를 값으로 사용할 수 있다. 변수에 함수를 담을 수 있는게 이러한 이유 때문이다.
var sample = function() { console.log("I am a sample"); }
이렇게 함수를 변수에 담아 다른 함수의 인자로 전달하는것까지 가능하다. 전달된 함수를 호출하는것도 가능하다.
let shout = function() {
console.log("아아아아아");
}
function sample(func) {
func()
}
sample(shout)
샐행 결과
이처럼 함수를 값으로 삼아 다른 함수에 인자로 넘겨주는 함수를 콜백(Callback) 혹은 콜애프터 함수(Call-after function)이라 부른다
https://besforyou.tistory.com/274
콜백 지옥 (Callback Hell)
콜백 함수는 비동기처리에 자주 사용된다.
그런데 콜백 함수가 너무 많이 중첩된다면?
loadScript('1.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('2.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('3.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...continue after all scripts are loaded (*)
}
});
}
});
}
});
이런식의 가독성 떨어지는 코드가 되어버린다. 이러한 코드는 수정하기도 어렵다.
콜백 지옥 탈출 방법
1. Promise
https://besforyou.tistory.com/230
JavaScript - Promise, Call back
Promise 자바스크립트에서 비동기를 간편하게 처리해주는 객체입니다. 비동기는 '특정 코드의 실행이 완료되기를 기다리지 않고 다음 코드를 먼저 수행하는 것을 말합니다'. 프로미스는 다음 중
besforyou.tistory.com
2. async & await
https://besforyou.tistory.com/239
JavaScript - async, await
async, await? async, await은 자바스크립트 비동기 처리를 위한 키워드. 기존의 비동기 처리 방식인 콜백 함수, Promise의 단점인 좋지 않은 가독성을 보완한 가장 최근에 나온 자바스크립트 비동기 처리
besforyou.tistory.com
3. 콜백 함수 분리
위 코드에서 콜백 함수들을 아래와 같이 분리 가능하다.
loadScript('1.js', step1);
function step1(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('2.js', step2);
}
}
function step2(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('3.js', step3);
}
}
function step3(error, script) {
if (error) {
handleError(error);
} else {
// ...continue after all scripts are loaded (*)
}
}
출처
'Programming > JavaScript' 카테고리의 다른 글
JavaScript - Lexical Environment ( 렉시컬 환경 ) (0) | 2022.08.19 |
---|---|
JavaScript - 함수 선언식과 함수 표현식 차이점 (0) | 2022.08.19 |
JavaScript - Callback (0) | 2022.08.18 |
JavaScript - prototype & prototype chaining (0) | 2022.08.12 |
JavaScript - Hoisting ( 호이스팅 ) (0) | 2022.08.12 |