콜백지옥 . callback hell
오늘은 콜백지옥을 만들어보자.
그리고 Async와 promise 가 이 콜백지옥을 어떻게 해결하는지 공부해보자
loginUser와 getRoles 라는 API를 가지는 클래스 선언.
loginUser는 id,password를 받고 로그인이 정상적으로 이루어지면 실행되는 onSuccess 콜백함수, 로그인에 실패하면 실행되는 onError라는 콜백함수가 들어있다.
getRoles는 로그인에 성공한 사용자의 데이터를 받아서 사용자의 role을 받아오는 API. 실제 서버와 통신하는 코드가 아니지만 이해를 하기위해 setTimeout을 이용함.
userStorage라는 인스턴스를 만들었고
loginUser를 실행한다. id와 password를 요구하고 if가 true면(아이디가 ellie이고 비번이 dream 이거나 아이디가 coder이고 비번이 academy이거나) 세번째에 있는 onSuccess콜백함수가 실행됨. 그리고 로그인 진행됨과 동시에 role을 받아와야 하기 때문에 getRoles콜백함수가 또 실행됨. getRoles 콜백함수 안에는 또 true가 되면(아이디가 ellie이면)실행되는 onSuccess콜백함수가 또있음.
결국 아이디가 ellie이면 로그인도 되고 롤도 받아올 수 있음.
아아디가 coder이면 로그인은 되지만 롤은 없음
나머지는 로그인도 안됨.
별거 아닌데 엄청 복잡해보이고
내가 실습한게 아니라면 무슨말인지 모를 듯..
콜백을 계속 중첩? 해서 사용하는 것을 콜백지옥이라고 표현한다. 개발자들이 얼마나 싫어하고 피하고 싶어하는지 알 수 있는 단어다.
싫어하는 이유는 가독성이 떨어짐, 나중에 에러가 발생하거나 디버깅을 해야하는 상황에서 너무 어려움. 이런 이유로 유지보수가 어려워지기 때문이라고 한다. 다음으로 Promise와 async등을 배우면서 이 콜백지옥을 어떻게 현명하게 해결할지 공부해보자.