[英]JavaScript setTimeout in for Loop for Performance Test
我正在尝试使用setTimeout进行使用console.time()和console.timeEnd()的性能测试。 但是,setTimeout()不会延迟for()循环。
这是JS小提琴:
// Start the timer. console.time('testFor'); for ( i = 0; i < 5; i++ ) { setTimeout( console.log('The number is ' + i), 2000 ); } // End the timer, get the elapsed time. console.timeEnd('testFor');
如何使setTimeout()在脚本中起作用,为什么它对我不起作用?
其他人已经为您的问题提出了极好的解决方案-我想仔细检查一下您的代码所发生的情况。
setTimeout
不会延迟代码的升级(就像其他语言的sleep
一样),而是推迟运行另一个代码块。 这个奇怪的概念可能很难理解。 考虑以下示例:
console.time("Main Program");
console.time("Defered Code");
setTimeout(deferedCode, 1000);
console.timeEnd("Main Program");
function deferedCode() {
console.timeEnd("Defered Code");
}
如果在运行此代码后查看控制台,我们将几乎立即看到“主程序”和“延迟代码”的打印。
我们已经要求setTimeout
在将来的1000 ms的时间运行函数deferedCode
,然后让其余代码运行。
还要注意, deferedCode
传递给不带()
setTimeout
。 我们将函数本身而不是deferedCode
的结果deferedCode
给setTimeout
以便setTimeout
可以选择何时运行它。
您可以使用循环来实现,而无需循环:
var i = 0;
var logNumber = function(){
console.log('The number is ' + i);
i++;
if(i < 5){
setTimeout(logNumber, 2000);
}
}
logNumber();
setTimeout是异步的。 如果要定期调用某些代码,请使用setInterval函数。
我认为这段代码与您要执行的操作很接近:
// Start the timer.
console.time('testFor');
var i = 0;
var finish = 5;
var t = setInterval(function() {
if (i < finish) {
console.log('The number is ' + i);
i++;
} else {
clearInterval(t);
// End the timer, get the elapsed time.
console.timeEnd('testFor');
}
}, 2000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.