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
반응형
'Programming > JavaScript' 카테고리의 다른 글
[JS] 보안 키패드 입력 error 예외처리(ft. isNaN) (0) | 2024.08.19 |
---|---|
[JS] Object 변수 데이터 추가, 문자열(String)을 이용한 동적 접근 방법 (0) | 2022.08.17 |
[JS] 자바스크립트의 상속과 prototype (0) | 2022.08.04 |
[JavaScript] String-boot 웹 소켓(WebSocket)을 이용한 실시간 채팅 구현 - Session Storage 활용하기 (2) | 2021.12.29 |
[JavaScript] 바닐라 자바스크립트 disabled, display 속성 추가, 해제(변경) (0) | 2021.12.29 |