일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 추천 사이트
- BindingResult
- Test 룸북 사용하기
- 하모니카 OS 5
- 시퀀스 조회
- cmd
- 함수 인자값 id
- 자바스크립트 인라인
- 프로젝트 클린
- 다른사람 프로젝트 수정전 가져야할 자세
- 개발시작전 자세
- Intellij
- JSON
- 룸북
- 비밀번호 변경 명령어
- 설정
- 리눅스
- 추천 프로그램
- it
- 명령어
- 스프링부트
- #{..}
- StringUtils.hasText
- 타임리프와 스프링
- linux
- js
- select
- Java
- 순서 보장
- 타임리프
Archives
- Today
- Total
웹개발 블로그
[JS] 비동기 작업 처리하기1 - 콜백함수 사용하여 처리 본문
callback함수를 통해 바깥에서도 내부에 선언한 변수 사용가능하다.
[예시1]
3초뒤 sum 값 출력
add함수가 실행되면서,
내부에 있는 비동기함수가 실행된다.
3초뒤 sum이 계산되고 인자값으로 sum을 주게되고 callback 함수가 실행된다.(비동기 결과값을 외부에서 사용가능)
function add(a,b, callback) { //callback함수를 통해 비동기함수의 결과값을 외부에서 사용가능하다.
setTimeout(() => { const sum = a+b;
callback(sum);
}, 3000);
}
add(1, 2 , (value) => {console.log(value);});
//(3초 뒤) 3
[예시2]
음식을 주문하는 상황
3초뒤 음식이 도착한다는 가정,
음식을 받은 뒤 2초뒤에 식은 음식을 출력한다.
1.5초뒤에는 냉동 음식을 출력한다.
여기서 비동기 작업의 결과를 또 다른 비동기 작업의 인수로 전달이 가능하다.
//주문 함수
function orderFood(callback) {
setTimeout(() => {
const food = "떡볶이";
callback(food);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
},3000);
}
//식은 함수
function cooldownFood(food, callback) {
setTimeout(()=> {
const cooldownedFood = `식은 ${food}`;
callback(cooldownedFood);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
}, 2000);
}
//냉동 함수
function freezeFood(food, callback){
setTimeout(()=> {
const freezedFood =`냉동 ${food}`;
callback(freezedFood);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
}, 1500);
}
//호출
orderFood((food) => {
console.log(food);//(출력)떡볶이
//callback함수 선언
cooldownFood(food, (cooldownedFood) => {//food ,비동기 작업의 결과를 또다른 비동기 작업의 인수로 전달
console.log(cooldownedFood);//(출력)식은 떡볶이
//callback함수 선언
freezeFood(cooldownedFood, (freezedFood) => {//cooldownedFood ,비동기 작업의 결과를 또다른 비동기 작업의 인수로 전달
console.log(freezedFood);//(출력)냉동 떡볶이
});
});
});
💥하지만 이런 방식 보다는
더 나은 방식이 있다( 들여쓰기가 많아지면서 가독성이 떨어진다.)
이런 문제를 콜백지옥이라 부르는데...
방법이 없을까?
이 다음 시간에
'프로미스' 포스팅을 작성하겠습니다.
'◆React.js & Next.js & Node.js > JavaScript' 카테고리의 다른 글
[JS] 비동기 작업 처리하기3 - async/await 키워드에 대해서 (0) | 2025.01.26 |
---|---|
[JS] 비동기 작업 처리하기2 - Promise (JS 내장객체) (1) | 2025.01.26 |
[JS] 스프레드(Spread) 연산자? (1) | 2025.01.21 |
[JS] (배열/객체) 구조 분해 할당 (0) | 2025.01.21 |
[JS] 함수, 함수 표현식, 화살표 함수, 콜백함수 (1) | 2025.01.20 |