Asynchronous Programming In Javascript - Callback
1] Features of functions in Javascript
Javascript의 function은 First-Class Citizens(1급 객체)이다.
\=> 그 말은, 함수는 그 자체가 객체가 된다는 말이며 다른 Javascript의 객체처럼 사용될 수 있다는 뜻이다.
따라서,
함수는 변수에 할당할 수 있다.
함수는 다른 함수의 인자로 줄 수 있다.(callback으로 줄 수 있다.)
함수는 다른 함수에서 리턴될 수 있다.
2] Callback
다른 함수에서 인자를 받아 그 함수 내에서 실행되는 함수
Example)
forEach라는 함수에서 인자를 받아서 print가 forEach 함수 내에서 실행되고 있다.
print라는 함수를 정의하고, callback으로 사용한 것이다.
print()가 아닌 print인 것을 볼 수 있다.
3] Further Details
Callbacks Are Not Always Asynchronous
callback을 비동기 처리(좌)할 수도, 동기 처리(우)에 사용할 수도 있다.
4] Handle Errors In Asynchronous Code
callback의 첫번째 인자를 통해 에러를 핸들링한다.
비동기 함수 내에 문제가 생기면 어떤 종류의 오류가 발생했는지
알려주는 첫번째 인수(error라는 인자)를 사용하여 콜백이 호출된다.
문제가 없으면, 첫번째 인자는 null이 된다
5] Limitation of callback
Callback Hell
다음과 같이 함수를 적용할 경우, plusOne 함수는 비동기이기 때문에
1초 뒤 1, 2, 3이 동시에 나오게된다.
따라서 callback을 사용하여 1, 2, 3이 1초씩 걸리게 나오게 하려면 다음과 같이 하면 된다.
새로운 함수가 추가될 수록 안쪽 콜백에 자리잡게 되고, 이러한 읽고 이해하기에 힘든 Callback Hell이 만들어지며, 이러한 이유로 Promise를 개발하게 된다.