2017-05-20 8 views
2

JavaScript가 setTimeout (또는 몇 가지 동일한 기능을하는)을 사용하여 시간이 다가올 때까지 다음 줄로 이동하지 않는지 궁금합니다. 예를 들어 아래 코드를 의도 한대로 작동시키는 방법이 있습니까?setTimeout을 동기식으로 사용할 수 있습니까?

var cntr = 0; 

while(cntr < 25) { 
    setTimeout(200); //wait 200ms to continue to next line 
    console.log(cntr); //or some other task 
    cntr++; 
} 

내가받은 답변에 미리 감사드립니다.

+1

아니, 불가능에서 작동합니다. 너는 그것을 위해 무엇을 필요로 하는가? – Ryan

답변

3

setTimeout은 절대 동기가 될 수 없습니다. 그러나 당신은 당신이 원하는 것을 달성하기 위해 재귀를 사용할 수 있습니다 -

var cntr = 0 

function printCounter() { 
    console.log(cntr) 
    cntr++ 
    if(cntr < 25) { 
    setTimeout(printCounter, 200) 
    } 
} 

setTimeout(printCounter, 200) 
-1

'SetInterval()'함수를 사용해 보셨습니까?

setInterval(loop(), 200); 

    function loop() { 
     console.log(cntr); 
     cntr++; 
    } 

마다 200ms가 발생합니다.

0

당신이 얻을 수있는 가장 가까운 async/await을 사용하여입니다. 여기서 문제는 많은 브라우저에서 지원되지 않기 때문에 어떤 브라우저를 지원할 것인가에 따라 좋은 해결책이 아닐 수 있습니다.

나는이 (내가 그것을 테스트 곳이다) 가장 최근의 크롬 브라우저에서 작동 알고, 노드 7

// Tell the browser that this function is asynchronous 
async function myFunc() { 
    // Await for the promise to resolve 
    await new Promise((resolve) => { 
     setTimeout(() => { 
      // Resolve the promise 
      resolve(console.log('hello')); 
     }, 3000); 
    }); 
    // Once the promise gets resolved continue on 
    console.log('hi'); 
} 

// Call the function 
myFunc(); 
관련 문제