← Back to NOTES 🌰 ← Effective JavaScript 🤿

← 아이템 63 - 오류를 놓치지 않도록 조심하라

핵심 요약

자세한 내용

동기 함수에서의 반복

URL 배열을 받아 하나씩 다운로드를 시도하고 성공할 때까지 반복하는 함수를 작성할 때, 동기 함수라면 일반적인 for 루프를 사용할 수 있다.

비동기 함수에서의 문제점

비동기 함수에서 단순히 for 루프를 사용하면 downloadAsync 함수가 끝나기 전에 다음 다운로드가 시작된다. 이는 의도한 동작이 아니다.

해결 방법: 재귀 함수

루프처럼 동작하지만 명시적으로 그렇게 말할 때까지 실행을 계속하지 않는 것을 구현해야 한다. 해결책은 루프를 함수로 구현하여 각 반복을 시작할 때를 결정할 수 있도록 하는 것이다.

재귀 함수를 이용해서 종료와 다음 다운로드 시작을 보장하게 작성할 수 있다.

재귀 함수와 콜스택

JavaScript 환경에서 재귀 함수는 자기 자신을 너무 많이 호출하면 콜스택이 터질 수 있다.

그러나 비동기 재귀 함수는 무수히 호출되어도 콜스택이 터지지 않는다. 그 이유는 재귀 함수 안에서 또다시 재귀 함수가 호출되는 부분이 콜백이기 때문이다.