大家好。
我有这个简单的代码:
totalTextArray = textForChatWithSeparators.split("#");
$.each(totalTextArray, function( index, value ) {
setTimeout(function(){console.log( value )},1000);
});
我希望在控制台日志中看到,每秒记录“value
”,但我看到所有日志在延迟 1 秒后在一个 block 中出现。
我做错了什么?我在想函数内部的函数可能会导致一些缓冲问题?
最佳答案
你正在做的是
- 调用
setTimeout
n 次 - 所有 timeouts 将在
1000
ms 后触发
如果你不想改变结构,你需要做的是增加每次迭代的超时值,比如
setTimeout(function(){ console.log( value ) },1000*index);
一个可能更优雅(也是更正确的方法 imo)是一起改变循环的结构。使用像
这样的间隔计时器(function _loop( elem ) {
console.log( elem );
if( totalTextArray.length ) {
setTimeout( _loop.bind( null, totalTextArray.shift() ), 1000 );
}
}());
关于javascript - 使用 setTimeout 延迟 $.each() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23756201/