我想知道是否有办法在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++;
}
提前感谢您收到的任何答案!
答案 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毫秒,会发生一些事情。