이제까지 비동기적으로 실행되는 자바스크립트에서 동기화처리를 하기 위해 Promise를 활용했었다.
setTimeout은 뭔가 임시방편 같은 느낌이었는데, 개발을 하다가 확실히 간단한 동기화처리에는 setTimeout이 효율적인 방법이란 걸 알게 됐다.
setTimeout(function, delay, ...args)
setTimeout(() => {
console.log("3초 후에 이 메시지가 출력됩니다.");
}, 3000);
function sum(a, b) {
console.log(a + b);
}
setTimeout(sum, 1000, 5, 10); // 1초 후에 "15"가 출력됩니다.
비동기처리는 다양한 이유(실시간데이터처리, 병렬작업, api호출, 이벤트리스너)로 사용자경험을 개선하는데 도움을 줍니다.
api호출 후 코드들을 동기화처리 하기 위해서 간단하게 setTimeout을 활용할 수 있습니다.
이 때, 특정 밀리초를 파라미터로 전달하게 되면 api응답 전에 지정한 시간이 지나버려 꼬여버릴 수 있습니다.
시간 파라미터를 0 혹은 생략하게 되면, 비동기 API 호출을 수행한 이후의 작업이 순차적으로 실행됩니다.
예시
function fetchData(url, callback) {
console.log("API 호출 시작...");
// 비동기 API 호출
fetch(url)
.then(response => response.json())
.then(data => {
console.log("API 호출 완료. 데이터:", data);
})
.catch(error => console.error("API 호출 에러:", error));
//이후 setTimeout호출로 api호출이 끝난 후 callback함수실행
setTimeout(() => {
callback(data);
}, 0); // 0ms의 지연 시간으로 콜백 호출
}