使用JavaScript在特定延迟后执行脚本
是否有类似jQuery的JavaScript方法使用JavaScript在特定延迟后执行脚本,javascript,settimeout,Javascript,Settimeout,是否有类似jQuery的JavaScript方法delay()或wait()(将脚本的执行延迟一段特定的时间)?您需要使用并向其传递回调函数。不能在javascript中使用sleep的原因是,在此期间,您会阻止整个页面执行任何操作。这不是一个好计划。使用Javascript的事件模型并保持快乐。不要反抗 有以下几点: setTimeout(function, milliseconds); 可以传递函数执行时间的函数 请参阅:。您还可以使用定期重复运行某些代码。只需稍微扩展一下。。。您可以在s
delay()
或wait()
(将脚本的执行延迟一段特定的时间)?您需要使用并向其传递回调函数。不能在javascript中使用sleep的原因是,在此期间,您会阻止整个页面执行任何操作。这不是一个好计划。使用Javascript的事件模型并保持快乐。不要反抗 有以下几点:
setTimeout(function, milliseconds);
可以传递函数执行时间的函数
请参阅:。您还可以使用定期重复运行某些代码。只需稍微扩展一下。。。您可以在
setTimeout
调用中直接执行代码,但正如前面所说,您通常会分配一个回调函数,如下所示。时间是毫秒
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
除了其他人所说的关于设置超时的内容之外: 如果将来要使用参数调用函数,则需要设置一些匿名函数调用 您需要将函数作为参数传递,以便稍后调用。实际上,这意味着名称后面没有括号。以下内容将立即调用警报,并显示“Hello world”:
var a = "world";
setTimeout(alert("Hello " + a), 2000);
要解决这个问题,您可以输入函数名(正如Flubba所做的那样),也可以使用匿名函数。如果需要传递参数,则必须使用匿名函数
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
但是如果您运行该代码,您会注意到在2秒钟后弹出窗口将显示“Hello Stack Overflow”。这是因为变量a的值在这两秒钟内发生了变化。要让它在两秒钟后说“Hello world”,您需要使用以下代码段:
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
它将等待2秒钟,然后弹出“Hello world”。要添加先前的评论,我想说以下几点: JavaScript中的
setTimeout()
函数不会暂停脚本本身的执行,而只是告诉编译器将来某个时候执行代码
没有一个函数可以真正暂停JavaScript内置的执行。但是,您可以编写自己的函数,通过使用
Date()
函数并添加所需的时间间隔,执行类似于无条件循环的操作,直到到达时间为止。如果您真的想使用阻塞(同步)延迟
函数(无论什么),为什么不这样做:
<script type="text/javascript">
function delay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date(); // Possible memory leak?
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
// d = null; // Prevent memory leak?
}
}
alert("2 sec delay")
delay(2000);
alert("done ... 500 ms delay")
delay(500);
alert("done");
</script>
功能延迟(毫秒){
var cur_d=新日期();
var cur_ticks=cur_d.getTime();
var ms_passed=0;
while(ms_通过
如果您只需要测试延迟,可以使用以下方法:
function delay(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
但这可能不是最好的生产方式。关于这一点的更多信息,在评论中,我有一些ajax命令,我想在两者之间延迟运行。下面是一个简单的例子,说明了一种方法。不过,我已经准备好为我的非传统做法而被撕成碎片。:) 您可以复制代码块并将其粘贴到控制台窗口中,然后看到如下内容:
Loading: 03.077
Loaded: 03.078
A: 03.079
B: 04.075
C: 05.075
D: 06.075
E: 07.076
done: 08.076
为什么你不能把密码放在承诺后面?(在我头顶上输入)
新承诺(功能(解析、拒绝){
setTimeout(resolve,2000);
}).然后(函数(){
log('做任何你想推迟的事');
});代码>简单的回答是:
setTimeout(
function () {
x = 1;
}, 1000);
上述函数等待1秒(1000毫秒),然后将x设置为1。
显然这是一个例子;您可以在匿名函数中执行任何操作 我非常喜欢Maurius对调用setTimeout
的三种不同方法的解释(最高投票率的响应)
在我的代码中,我希望在AJAX保存事件完成后自动导航到上一页。保存事件的完成在CSS中有一个轻微的动画,表示保存成功
在我的代码中,我发现前两个示例之间存在差异:
setTimeout(window.history.back(), 3000);
这一个并不等待超时——无论我为延迟输入了什么数字,back()几乎立即被调用
但是,将此更改为:
setTimeout(function() {window.history.back()}, 3000);
这正是我所希望的
这并不特定于back()操作,同样的情况也发生在alert()
中。基本上,对于第一种情况中使用的alert()
,延迟时间被忽略。当我关闭弹出窗口时,CSS的动画将继续
因此,我推荐他描述的第二或第三种方法,即使您使用的是内置函数而不是参数。正如其他人所说,setTimeout是您最安全的选择
但有时您无法将逻辑与新函数分离,然后您可以使用Date.now()获取毫秒数,然后自己进行延迟
功能延迟(毫秒延迟){
毫秒延迟+=日期。现在();
while(Date.now() 警报(“#我回来了”#日期:“+新日期())代码>延迟调用函数的最简单解决方案是:
function executeWithDelay(anotherFunction) {
setTimeout(anotherFunction, delayInMilliseconds);
}
延迟功能:
/**
* delay or pause for some time
* @param {number} t - time (ms)
* @return {Promise<*>}
*/
const delay = async t => new Promise(resolve => setTimeout(resolve, t));
await delay(1000);
不应使用setInterval(),而应使用setTimeoutsetTimeout()
执行一次,setInterval()
重复执行。如果您希望代码每5秒运行一次,则为该作业生成setInterval()
。它不是执行的表达式,而是函数@马吕斯的回答说明了这一点。这不是拖延,而是叉子。延迟应该在同一个线程中工作。这将立即执行函数\u引用。要“工作”(异步),应该声明为:setTimeout(函数(){MethodToCall();},1000);我想指出,我们正在讨论
/**
* delay or pause for some time
* @param {number} t - time (ms)
* @return {Promise<*>}
*/
const delay = async t => new Promise(resolve => setTimeout(resolve, t));
await delay(1000);