자바나 파이썬에는 실행을 입력한 시간만큼 멈추는 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');
}
반응형
    
    
    
  'javascript' 카테고리의 다른 글
| html2canvas CORS 우회하기 (0) | 2022.12.11 | 
|---|---|
| JSDoc (0) | 2022.08.30 | 
| for loop 에서 우선순위 찾기 (0) | 2022.06.09 | 
| 더 깔끔한 조건문 사용하기 (0) | 2022.05.12 | 
| 코딩테스트 - 신규 아이디 추천 (0) | 2022.03.07 | 
 
                    
                   
                    
                   
                    
                  