javascript
setTimeout + async/await로 sleep
hjcode
2022. 6. 28. 18:22
자바나 파이썬에는 실행을 입력한 시간만큼 멈추는 sleep이나 wait가 있지만
자바스크립트에서는 사용자가 직접 구현해야합니다.
setTimeout이 비슷하지만 아래와 같이 사용하면 예상이랑 다른 결과가 나옵니다.
function test(){
console.log('a');
setTimeout(() => console.log('time'), 3000);
console.log('b');
}
// a
// b
// time
setTimeout은 비동기로 동작하기 때문에 먼저 실행이 가능한 a, b가
먼저 콘솔에 찍히고 3초후에 time이 찍힙니다.
async/await 사용하면 동기적으로 실행을 하게 할 수 있지만 setTimeout은 Promise를
반환하지 않기 때문에 async/await를 적용해도 제대로 동작하지 않습니다.
a가 찍히고 5초후에 b가 나오지않고 a,b가 순차적으로 바로 찍힙니다.
async function test(){
console.log('a');
await setTimeout(() => {}, 5000);
console.log('b');
}
아래와 같이 Promise를 반환하게 해주면 원하는 결과대로 동작합니다.
const sleep = delay => new Promise(resolve => setTimeout(resolve, delay));
async function test() {
console.log('aa');
await sleep(3000);
console.log('bb');
}
반응형