[英]javascript wait before executing next time of code
我有这个代码我在firebug中运行
for(var i = 0; i < 3; i = i+1)
{
console.log("hi "+i);
setTimeout(function()
{
console.log("hi again "+i);
}, 10000);
}
我想要做的是,在每次迭代中,它将输出第一条消息,等待10秒然后输出第二条消息,然后再进行下一次迭代
然而,当我运行它时,它输出的第一条消息在它输出的第二条消息之前输出了3次,我想知道如何在执行下一行代码之前修复我的代码等待,在这种情况下,继续进行下一次迭代
这里的问题是循环体在运行setTimeout
任何回调之前运行完成。 因此,它将在任何“hi again”消息之前打印所有“hi”消息。 为了解决这个问题,您需要安排“hi”消息在“hi again”运行之后运行。 例如
(function() {
var go = function(count) {
console.log("hi " + count);
setTimeout(function() {
console.log("hi again " + count);
if (count < 3) {
go(count + 1);
}, 10000);
};
go(0);
})();
当你调用setTimeout时,它会说“继续做你正在做的事情,但是在X毫秒内也这样做。所以你需要做类似的事情:
function sayHi(i) {
console.log("hi "+i);
setTimeout(function()
{
console.log("hi again "+i);
if (i < 3) sayHi(i+1);
}, 10000);
}
sayHi(0);
您总是可以编写简单耗时的功能来帮助您完成任务
function pauseScript(seconds) {
var stop = Date.now() + seconds*1000;
for (var i; stop >= Date.now(); i++){}
}
并且当你想要“停止”代码一段时间时调用它
for (var i=1; i<=10; i++) {
pauseScript(10) // pause 10 seconds
var d = new Date();
console.log("pass #"+i+" [time now = "+d.toTimeString().substr(0,8)+']');
}
在控制台日志中你会看到这样的东西
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.