有没有办法让setTimeout同步?

时间:2017-05-20 19:22:19

标签: javascript html

我想知道是否有办法在JavaScript中生成一个setTimeout(或一些等价物),直到时间结束时才会移动到下一行。例如,有没有办法使下面的代码按预期工作?

var cntr = 0;

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

提前感谢您收到的任何答案!

3 个答案:

答案 0 :(得分:3)

setTimeout永远不能同步。但是你可以使用递归来实现你想要的 -

var cntr = 0

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

setTimeout(printCounter, 200)

答案 1 :(得分:0)

您最接近的是使用async/await。这里的问题是许多浏览器都不支持它,因此根据您想要支持的浏览器,这可能不是一个好的解决方案。

我知道这可以在最新的Chrome浏览器(我测试它的地方)中使用,并且应该在节点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();

答案 2 :(得分:-1)

您是否尝试过'SetInterval()'函数?

 setInterval(loop(), 200);

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

每200毫秒,会发生一些事情。