콜백지옥이란?

정승렬·2023년 2월 27일
0

기술면접

목록 보기
7/38

JavaScript를 이용한 비동기 프로그래밍시 발생하는 문제로서, 함수의 매개변수로 넘겨지는 콜백 함수가 반복되어 코드의 들여쓰기 수준이 감당하기 힘들 정도로 깊어지는 현상

step(function (value) {
	step(function (value) {
    	step(function (value) {
        	step(function (value) {
            	step(function (value) {
                	step(function (value) {
                    });
                 });
              });
           });
        });
     });

비동기를 제어하는 방법 (콜백 지옥 탈출 방법)
1. Promise

  • ES6의 Promise를 이용한다
  • Promise()는 new 연산자와 함께 호출하고 인자로 콜백을 받는다
  • Promise()는 Promise를 반환한다
  • Promise는 호출될 때 바로 실행되지만 그 안에 콜백은 resolve, reject 둘 중 하나가 호출 되기 전에 then 또는 catch로 넘어가지 않는다
  • resolve, reject로 성공 혹은 실패로 결과 값을 나타내어 다음 작업을 체이닝할 수 있다.(비동기 제어 가능)
  • then으로 작업을 이어가기 위해서는 resolve() 함수를 호출한다
  • 작업을 중단 혹은 err 처리를 위해서는 reject() 함수를 호출한다.

서버에서 데이터를 받아올 때 받아오기에 성공할 경우 resolve()함수를 호출하고 실패할 경우 reject() 함수를 호출해서 서로 다른 작업으로 이어질 수 있게 만든다.

2. Promise + async/await

  • 비동기 작업을 수행하고자 하는 함수 앞에 async를 표기하고
    함수 내부에서 실질적인 비동기 작업이 필요한 위치마다 await을 표기하는 것만으로도
    뒤의 내용을 promise로 자동 전환하고 해당 내용이 resolve된 이후에야 다음으로 진행된다.

0개의 댓글