비동기 처리 단점
콜백 지옥(Callback Hell)
콜백 함수는 연쇄적으로 발생하는 비동기 작업을 순차적으로 동작할 수 있게 함
보통 어떤 기능의 실행 결과를 받아서 다른 기능을 수행하기 위해 많이 사용하는데,
이 과정을 작성하다 보면 비슷한 패턴이 계속 발생하게 됨
A를 처리해서 결과가 나오면
-> 첫번째 callback 함수 실행
-> 첫번째 callback 함수 종료
-> 두번째 callback 함수 실행
-> 두번째 callback 함수 종료
-> 세번째 ,,,
비동기 처리를 위한 콜백을 작성할 때 마주하는 문제를
callback Hell이라하며, 그때의 코드 작성 형태가
마치 "피라미드와 같다"고 해서 "파멸의 피라미드"라고도 부름
정리
- 콜백 함수는 비동기 작업을 순차적으로 실행할 수 있게 하는 반드시 필요한 로직
- 비동기 코드를 작성하다 보면 콜백 함수로 인한 콜백 지옥은 반드시 나타나는 문제
- 코드의 가독성을 해치고
- 유지 보수가 어려워짐
then & catch
then(callback)
catch(callback)
then과 catch 모두 항상 promise 객체를 반환
즉, 계속해서 chaining을 할 수 있음
axios로 처리한 비동기 로직이 항상 promise객체를 반환
그래서 then을 계속 이어 나가면서 작성할 수 있던 것
비동기 콜백 vs Promise
- promise 방식은 비동기 처리를 마치 우리가 일반적으로 위에서 아래로 적는 방식처럼 코드를 작성할 수 있음
Promise가 보장하는 것 (vs 비동기 콜백)
callback 함수는 JavaScript의 Event Loop가
현재 실행 중인 Call Stack을 완료하기 이전에는 절대 호출되지 않음
비동기 작업이 성공하거나 실패한 뒤에 .then() 메서드를 이용하여 추가한 경우에도 1번과 똑같이 동작
.then()을 여러 번 사용하여 여러 개의 callback 함수를 추가할 수 있음 (Chaining)