gpt4 book ai didi

Node.js setTimeout() 行为

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:25 24 4
gpt4 key购买 nike

我希望一段代码重复 100 次,中间有 1 秒的延迟。这是我的代码:

for(var i = 0; i < 100; i++){
setTimeout(function(){
//do stuff
},1000);
}

虽然这对我来说似乎是正确的,但事实并非如此。与其运行“do stuff”100 次并在其执行之间等待 1 秒,不如等待 1 秒,然后无延迟地运行“do stuff”100 次。

有人对此有任何想法吗?

最佳答案

您可以使用setInterval()来完成它。

只要对存储它的变量timer调用clearTimeout,它就会调用我们选择的函数。

请参阅下面的示例和注释:(并记住打开开发者控制台(在 chrome 中右键单击 -> 检查元素 -> 控制台)以查看 console.log)。

// Total count we have called doStuff()
var count = 0;

/**
* Method for calling doStuff() 100 times
*
*/
var timer = setInterval(function() {

// If count increased by one is smaller than 100, keep running and return
if(count++ < 100) {
return doStuff();
}

// mission complete, clear timeout
clearTimeout(timer);

}, 1000); // One second in milliseconds

/**
* Method for doing stuff
*
*/
function doStuff() {
console.log("doing stuff");
}

这里还有: jsfiddle example

作为奖励:您原来的方法将不起作用,因为您基本上是尽快分配 100 个 setTimeout 调用。所以不要让他们以一秒的间隙奔跑。它们的运行速度与 for 循环将它们放入队列的速度一样快,在当前时间 1000 毫秒后开始。

例如,以下代码显示使用您的方法时的时间戳:

for(var i = 0; i < 100; i++){
setTimeout(function(){

// Current time in milliseconds
console.log(new Date().getTime());

},1000);
}

它将输出类似(毫秒)的内容:

1404911593267 (14 times called with this timestamp...)
1404911593268 (10 times called with this timestamp...)
1404911593269 (12 times called with this timestamp...)
1404911593270 (15 times called with this timestamp...)
1404911593271 (12 times called with this timestamp...)

您还可以在以下位置看到该行为: js fiddle

关于Node.js setTimeout() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24653995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com