오늘도 4주차 콜백함수를 정리하면서 복습해보려합니다.
비동기 작업의 동기적 표현.. 저만 이해 안되는건가요..?? Promise 저만 어려워요..??
오늘의 study 목표!!!
- JavaScript 문법 종합반 3주차
1. 호출 시점
콜백 함수의 제어권을 넘겨받은 코드는 콜백 함수 호출 시점에 대한 제어권을 가진다.
원래 cbFunc()를 수행한다면 그 호출주체와 제어권은 모두 사용자가 된다.
setInterval로 넘겨주게 되면 그 호출주체와 제어권은 모두 setInterval이 된다.
2. 인자
map 메서드를 호출해서 원하는 배열을 얻고자 한다면 정의된 규칙대로 작성해야 한다. (콜백 내부의 인자도 포함)
즉, 콜백 함수를 넘겨받은 코드에게 그 제어권이 있다. 인자(의 순서)까지도 제어권이 그에게 있는 것임.
제어권이 넘어갈 함수의 규칙에 맞게 '내가' 호출해야 함!
3. this
콜백 함수도 함수이기 때문에 기본적으로는 this가 전역객체를 참조한다.
하지만 예외사항으로 제어권을 넘겨받을 코드에서 콜백 함수에 별도로 this가 될 대상을 지정한 경우에는 그 대상을 참조한다.
콜백 함수로 어떤 객체의 메서드를 전달하더라도, 그 메서드는 메서드가 아닌 함수로 호출한다.
1. 콜백 지옥이란
2. 동기 vs 비동기
동기: synchronous
비동기: a+synchronous => async
웹의 복잡도가 올라갈 수록 비동기적 코드의 비중이 늘어난다
비동기적인 요소를 왜 동기적으로 바꾸려고 하는가?
순서를 보장할 수 없으니까 순서 보장에 필요한 어떤 로직에서 순서를 보장받기 위해
promise는 비동기 처리에 대해, 처리가 끝나면 알려달라는 '약속'이다.
*가 붙은 함수가 제너레이터 함수. 제너레이터 함수는 실행하면, Iterator 객체가 반환 ( next()를 가지고 있음 )된다.
iterator 객체는 next 메서드로 순환 할 수 있는 객체.
next 메서드 호출 시, Generator 함수 내부에서 가장 먼저 등장하는 yield에서 stop 이후 다시 next 메서드를 호출하면 멈췄던 부분 -> 그 다음의 yield까지 실행 후 stop
즉, 비동기 작업이 완료되는 시점마다 next 메서드를 호출해주면 Generator 함수 내부소스가 위 -> 아래 순차적으로 진행된다.
비동기 작업을 수행코자 하는 함수 앞에 async 함수 내부에서 실질적인 비동기 작업이 필요한 위치마다 await를 붙여주면 된다.
Promise ~ then과 동일한 효과를 얻을 수 있음.