2011-11-15 52 views
20

如果我有一个函数,我希望我的js代码立即运行它,但运行后等待2秒钟。如何实现这一逻辑?如何在函数运行后等待一段时间

注:这是相反的逻辑与setTimeout()比较,因为setTimeout()先等待一段时间再执行该功能)

+0

你能给我几行代码吗?我认为你在寻找.delay(),但现在还不确定。 –

+0

好吧,我想你在做别的事情之前必须等2秒钟。在你执行你的函数之后,使用setTimeout()函数;-) –

+0

似乎你想等到2秒后再返回到调用函数。如果是,那么在返回之前使用setTimeout() – Rohan

回答

34

只要把你的代码传递给setTimeout的匿名函数内。

例如

functionToRunFirst(); 
setTimeout(function() { 
    // rest of code here 
}, 2000); 
2

什么是“等待2秒钟”的意思。?你的意思是你想阻止从该功能返回2秒?

如果是这样,你不能这样做。 JavaScript中没有sleep()函数。

你必须只使用的setTimeout()

3

使用setTimeout是一个办法做到这一点

function run() {  
    // run this code 

    setTimeout(afterTwoSeconds, 2000);  
} 

function afterTwoSeconds() {  
    // run this code two seconds after executing run. 
} 

// call run 
run(); 
1

没有错,上述问题的答案,但以不同的方式为:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() { 
    // two seconds later 
}); 
+1

这是你的相当黑客。为什么不''.delay()'如果jquery是你的选择? –

+0

因为我不知道.delay(),谢谢!我也认为OP提到了jQuery,但我似乎错了。 –

+0

他没有标记他的问题jquery。 –

6

我想你重新寻找是暂停执行代码直到超时的方法。许多业余程序员都希望有这样的构造,但它不存在于JavaScript中。这不是必需的。出于所有目的,JavaScript setTimeoutsetInterval是完美的候选解决方案。

但是,JavaScript是一种功能强大的语言。您可以构建自己的构造来解决此问题。看看Neil Mix的blog post。他的做法,您可以创建可沿以下线路上使用睡眠功能(注意,目前只有Firefox的支持JavaScript 1.7):

function mainGeneratorFunction() { 
    functionToRunFirst(); 
    yield sleep(2000); 
    //rest of the code 
} 

然而,对于其他浏览器不要绝望。您可以使用名为XHR Sleeping的黑客。在这种方法中,您只需使用同步XMLHttpRequest来调用像php这样的服务器端脚本,然后该脚本在指定时间内休眠并在唤醒后返回。 JavaScript代码如下:

function sleep(microseconds) { 
    var request = new XMLHttpRequest(); 
    request.open("GET", "sleep.php?time=" + microseconds, false); 
    request.send(); 
} 

functionToRunFirst(); 
sleep(2000000); 
//rest of the code 

PHP的睡眠功能如下:

<?php 
    usleep($_GET["time"]); 
?> 
1

给予一定的填写上你的一部分,这应该与半秒定时器运行5次

var counter = 0; 
var arrayOfPicture = []; //fill this out 

function gifSimulator() { 

    //use the counter as an index in the array, and change the image source of your element with that. 


    if (counter < 5) { 

     setTimeout(function() { 

      counter++; 

      gifSimlulator(); 

     }, 500); //lets wait half a second 
    } 
} 
0

我不知道你们为什么要这么多。我相信我们可以使用Date对象来做到这一点。先取日期值,然后使用setInterval函数等待,直到获得指定的时间间隔(获取新日期并检查差异)。一旦我们得到这个重置间隔函数并且在它可以运行之后继续执行你的代码。

相关问题