Programming/JavaScript
[JS] setTimeout 사용법과 await / sleep 만들기
Space_Jin
2024. 9. 5. 14:35
728x90
반응형
JavaScript에서 setTimeout은 비동기(async)로 특정 시간 후의 로직을 수행시킬 수 있다.
setTimeout 수행 예제
console.log('start');
// async로 3초(3,000ms)뒤에 {}안의 로직 수행
setTimeout(() => {
console.log('call it after 3s');
}, 3000);
console.log('end')
setTimeout 수행 결과
>>> start
>>> end
// ...약 3초 뒤...
>>> call it after 3s
setTimeout에 await를 사용하기
setTimeout await 사용
console.log('start');
// async로 3초(3,000ms)뒤에 {}안의 로직 수행
await setTimeout(() => {
console.log('call it after 3s');
}, 3000);
console.log('end')
setTimeout await 사용 결과
>>> start
>>> end
// ...약 3초 뒤...
>>> call it after 3s
await를 사용하지 않은 결과와 동일하다.
그 이유는 setTimeout은 Promise를 return하지 않기 때문
await는 Promise해결될 때까지 기다리는 행위이다.
하지만, setTimeout은 지정된 시간이 지난 후 콜백함 수를 수행하는 비동기 함수 일뿐, Promise를 반환하지 않는다.
>>> start
// ...약 3초 뒤...
>>> call it after 3s
>>> end
위와 같은 결과를 위해서 await를 사용하려고 했다면, 아래와 같이 해결할 수 있다.
setTimeout을 활용한 sleep 예제
// ms 밀리세컨즈 이후 Promise를 반환
const sleep = ms => {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
// sleep을 활용
const delay = async () =>{
console.log('start');
await sleep(3000);
console.log('end');
}
// delay 호출
delay()
setTimeout을 활용한 sleep 예제 결과
>>> start
// ...약 3초 뒤...
>>> call it after 3s
>>> end
728x90
반응형