프로그래밍 언어/HTML,CSS,JS

sleep ()의 JavaScript 버전에 대해서

Rateye 2021. 7. 21. 10:24
728x90
반응형

 

질문 : sleep ()의 JavaScript 버전은 무엇입니까?

다음 pausecomp 함수 ( 여기에서 pausecomp 보다 JavaScript sleep 을 엔지니어링하는 더 좋은 방법이 있습니까?

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

이것은 JavaScript의 Sleep과 중복되지 않습니다. 코드가 실행되기 전에 지연이 아니라 함수 중간에 실제 잠 을 원합니다.

답변

이 질문이 제기 된 2009 년 이후 JavaScript는 크게 발전했습니다. 다른 모든 답변은 이제 구식이거나 지나치게 복잡합니다. 다음은 현재 모범 사례입니다.

 
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function demo() {
  console.log('Taking a break...');
  await sleep(2000);
  console.log('Two seconds later, showing sleep in a loop...');

  // Sleep in loop
  for (let i = 0; i < 5; i++) {
    if (i === 3)
      await sleep(2000);
    console.log(i);
  }
}

demo();

또는 한 줄로 :

await new Promise(r => setTimeout(r, 2000));

 

알아두세요.

  1. await는 비동기 키워드 앞에 오는 함수 또는 증가하는 환경에서 스크립트의 최상위 수준에서만 실행할 수 있습니다.
  2. await는 현재 비동기 함수만 일시 중지합니다. 즉, 나머지 스크립트의 실행을 차단하는 것이 아닙니다. 대부분의 경우 여러분이 원하는 것입니다. 차단 구성을 원하는 경우 Atomics를 사용하여 이 답변을 참조하십시오.잠시 기다려 주십시오. 그러나 대부분의 브라우저는 브라우저의 기본 스레드에서는 허용하지 않습니다.

 

두 가지 새로운 JavaScript 기능 (2017 년 기준)이이 "sleep"함수를 작성하는 데 도움이되었습니다.

 

호환성

당신이 (도달 노드보다 오래된 7 사용하고 어떤 이상한 이유로 경우 의 수명을 ), 또는 오래된 브라우저를 대상으로, async / await 여전히를 통해 사용할 수 있습니다 바벨 (도구를 것 transpile 평범한 구식으로 자바 스크립트 + 새로운 기능을 JavaScript), transform-async-to-generator 플러그인 사용.

출처 : https://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep
728x90
반응형