setTimeout能否同步执行?

3

我想知道在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++;
}

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

1
不行,不可能的。你需要它做什么? - Ry-
3个回答

4

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

var cntr = 0

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

setTimeout(printCounter, 200)

2
最接近的方案是使用async/await。但问题在于它不被许多浏览器支持,所以根据你想要支持哪些浏览器,这可能不是一个好的解决方案。
我知道这在最新的Chrome浏览器中可行(这也是我测试的地方),并且应该可以在Node 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();

0
你尝试过 'SetInterval()' 函数吗?
 setInterval(loop(), 200);

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接