setTimeout 不工作
setTimeout is not working
我是 Javascript 的新手,我很熟悉 Java 中的 Thread.sleep
。据我所知,Java脚本使用 setTimeout
类似于 Thread.sleep
.
我正在使用 phantomjs
来打印我的线程:
function doThing(i){
setTimeout(function(){
console.log(i);
}, 100);
}
for(var i=1; i<20; i++){
doThing(i);
}
phantom.exit();
什么都不打印!!
你能告诉我这里有什么问题吗? :(
不胜感激!!
已编辑:
我正在使用 Java 程序调用 phantomjs script
。
因为程序在您允许它打印任何内容之前就完成了。
你应该推迟 phantom.exit()
。例如,您可以将它包含在一个 setTimeout
中,它会在完成循环后延迟足够长的时间。
例如,将最后一行更改为:
setTimeout(phantom.exit, 5000)
五秒后 phantom 将关闭,您应该会在控制台中看到打印的值。
试试这个
function doThing(i, last){
setTimeout(function(){
console.log(i);
if (last) phantom.exit();
}, 100 * i);
}
for(var i=1; i<20; i++){
doThing(i, i >= 19);
}
此代码中有 2 个修复(与原始代码相比):
- phantom.exit() 必须在最后一个操作完成后立即调用(在我的修订版中,我通过使用标志 'last' 解决了这个问题,该标志仅在最后一次迭代时设置为 true);
- 最好用稍微不同的超时值调用setTimeout,只是让它们一个一个地触发(不是那么关键,但还是更好)。
试试这个
var i = 0;
function doThing(){
console.log(i);
i++;
if(i<20) setTimeout(doThing, 100);
if(i>=20) phantom.exit();
}
setTimeout(doThing, 100);
Javascript的setTimeout
其实和Thread.sleep根本不一样。 Javascript 是单线程的,setTimeout
只是注册一个回调,在指定的毫秒数后执行,然后继续执行 setTimeout
调用之后的代码。它不会停止线程的执行。
Java 和 javascript 是不同的语言。所以你不能比较那些语言的特性。 setTimeout 在指定的时间间隔后执行代码块。
我是 Javascript 的新手,我很熟悉 Java 中的 Thread.sleep
。据我所知,Java脚本使用 setTimeout
类似于 Thread.sleep
.
我正在使用 phantomjs
来打印我的线程:
function doThing(i){
setTimeout(function(){
console.log(i);
}, 100);
}
for(var i=1; i<20; i++){
doThing(i);
}
phantom.exit();
什么都不打印!!
你能告诉我这里有什么问题吗? :(
不胜感激!!
已编辑:
我正在使用 Java 程序调用 phantomjs script
。
因为程序在您允许它打印任何内容之前就完成了。
你应该推迟 phantom.exit()
。例如,您可以将它包含在一个 setTimeout
中,它会在完成循环后延迟足够长的时间。
例如,将最后一行更改为:
setTimeout(phantom.exit, 5000)
五秒后 phantom 将关闭,您应该会在控制台中看到打印的值。
试试这个
function doThing(i, last){
setTimeout(function(){
console.log(i);
if (last) phantom.exit();
}, 100 * i);
}
for(var i=1; i<20; i++){
doThing(i, i >= 19);
}
此代码中有 2 个修复(与原始代码相比):
- phantom.exit() 必须在最后一个操作完成后立即调用(在我的修订版中,我通过使用标志 'last' 解决了这个问题,该标志仅在最后一次迭代时设置为 true);
- 最好用稍微不同的超时值调用setTimeout,只是让它们一个一个地触发(不是那么关键,但还是更好)。
试试这个
var i = 0;
function doThing(){
console.log(i);
i++;
if(i<20) setTimeout(doThing, 100);
if(i>=20) phantom.exit();
}
setTimeout(doThing, 100);
Javascript的setTimeout
其实和Thread.sleep根本不一样。 Javascript 是单线程的,setTimeout
只是注册一个回调,在指定的毫秒数后执行,然后继续执行 setTimeout
调用之后的代码。它不会停止线程的执行。
Java 和 javascript 是不同的语言。所以你不能比较那些语言的特性。 setTimeout 在指定的时间间隔后执行代码块。