<aside> 📌 요약: 콜백함수의 문제점은 가독성이 안좋을 뿐만아니라 비동기함수에서의 에러를 처리하지 못한다는 점이 있다.
async / await을 쓰는 이유는 비동기적인 함수들을 동기적으로 표현하기 위해서 쓴다. Promise도 많아지면 복잡하기 때문이다. await 뒤에 함수는 프로미스를 반환하는 함수를 작성해야 한다. 일반함수는 안됨.
JSON의 값으로 함수를 넣을수는 없다.
fetch의 결과로 반환된 값은 then()에서 처리하는데 여기에 promise object reponse를 가져온다. 이 response 객체에는 res.status, res.ok, res.text(), res.json(), res.formData() 등 성공 유무와 데이터 파싱 등을 할 수 있다.
동기적은 Blocking 현상이 일어날 수 있다.
Promise에서 pending 상태에서 result의 값은 undefined, resove가 되어 성공하면 state는 fulfilled가 되며 result에는 resolve로 감싼 value가 담긴다. 만약 실패하면 state가 rejected로 바뀌며 result 값에는 reject로 감싼 error가 담긴다.
async가 붙은 함수는 무조건 Promise를 반환한다. async 안에서 return “elice”
를 하나, return Promise.resolve(”elice”)
를 하나 같은 결과다.
const coffee = await getCoffee(); const tea = await getTea(); 위 두 함수를 실행하면 비동기적인 함수가 동기적으로 연결되어 직렬적으로 처리된다. 동시에 병렬처리를 하고싶으면 const [coffee, tea] = await Promise.all([getCoffee(), getTea()])와 같이 작성한다.
Closure는 내부 함수에서 외부 함수의 변수를 “참조” 하고 있기 때문에 Garbage Collector가 변수의 메모리를 해제하지 않기에 접근할 수 있는 것.
</aside>