如何在函数运行后等待一段时间

Mel*_*lon 26 javascript jquery javascript-events

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

(注意:它只是与逆逻辑比较setTimeout(),因为setTimeout()首先等待一定时间然后执行该函数.)

Gre*_*egL 41

只需将您的代码放入传递给setTimeout的匿名函数中.

例如

functionToRunFirst();
setTimeout(function() {
    // rest of code here
}, 2000);
Run Code Online (Sandbox Code Playgroud)


Aad*_*hah 6

我认为你正在寻找的是一种暂停执行代码直到超时的方法.许多业余程序员都希望有这样的构造,但它在JavaScript中不存在.这不是必需的.对于JavaScript的所有目的setTimeout,并setInterval有完善的候选方案.

但是,JavaScript是一种强大的语言.您可以构建自己的构造来解决此问题.看看Neil Mix的博客文章.通过他的方法,您可以创建一个睡眠功能,可以使用以下几行(请注意,目前只有Firefox支持JavaScript 1.7):

function mainGeneratorFunction() {
    functionToRunFirst();
    yield sleep(2000);
    //rest of the code
}
Run Code Online (Sandbox Code Playgroud)

但是,对于其他浏览器并不绝望.您可以使用称为的黑客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
Run Code Online (Sandbox Code Playgroud)

php睡眠功能如下:

<?php
    usleep($_GET["time"]);
?>
Run Code Online (Sandbox Code Playgroud)