setTimeout不起作用

时间:2015-07-07 08:32:39

标签: javascript phantomjs settimeout

我是Javascript的新手,我非常熟悉Java中的Thread.sleep。据我所知,Javascript使用的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程序调用{​​{1}}。

5 个答案:

答案 0 :(得分:1)

试试这个

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,只是为了让它们一个接一个地开火(不是那么关键,但仍然更好)。

答案 1 :(得分:1)

Javascript&#39; s setTimeout实际上与Thread.sleep完全不同。 Javascript是单线程的,setTimeout只是在提供的毫秒数之后注册要执行的回调,然后继续执行setTimeout调用之后的代码。它并没有停止线程的执行。

答案 2 :(得分:0)

因为程序在允许打印任何内容之前完成。

你应该推迟phantom.exit()。例如,您可以将其包含在setTimeout中,在完成循环后将其延迟足够长的时间。

例如,用这个更改你的最后一行:

setTimeout(phantom.exit, 5000)

五秒后幻像将关闭,您应该会看到控制台中打印的值。

答案 3 :(得分:0)

试试这个

var i = 0;
function doThing(){
    console.log(i);
    i++;
    if(i<20) setTimeout(doThing, 100);
    if(i>=20) phantom.exit();
}

setTimeout(doThing, 100);

答案 4 :(得分:0)

Java和javascript是不同的语言。因此,您无法比较这些语言的功能。 setTimeout在指定的时间间隔后执行代码块。

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