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 个修复(与原始代码相比):

  1. phantom.exit() 必须在最后一个操作完成后立即调用(在我的修订版中,我通过使用标志 'last' 解决了这个问题,该标志仅在最后一次迭代时设置为 true);
  2. 最好用稍微不同的超时值调用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 在指定的时间间隔后执行代码块。

http://www.w3schools.com/jsref/met_win_settimeout.asp