在JavaScript中,什么相当于Java的Thread.sleep() ?
你可以写一个自旋循环(一个循环,只是循环很长一段时间执行某种计算来延迟函数)或使用:
setTimeout("Func1()", 3000);
这将在3秒后调用'Func1()'。
编辑:
信用归评论者,但您可以将匿名函数传递给setTimeout。
setTimeout(function() {
//Do some stuff here
}, 3000);
这样效率更高,而且不需要调用javascript的eval函数。
没有直接的对等物,因为它会暂停一个网页。但是有一个setTimeout(),例如:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
闭包例子(谢谢Daniel):
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
第二个参数是触发前的毫秒数,您可以将其用于时间事件或执行操作前的等待。
编辑:根据注释更新,以获得更清晰的结果。
简单的答案是不存在这样的函数。
最接近你的东西是:
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
注意,你特别不想忙着等待(例如在一个旋转循环中),因为你的浏览器几乎肯定是在单线程环境中执行你的JavaScript。
下面是一些其他关于JavaScript线程的SO问题:
JavaScript和线程 为什么JavaScript不支持多线程?
这个问题可能也有帮助:
setTimeout -如何避免使用字符串回调?
试试这段代码。我希望这对你有用。
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
这最终帮助了我:
var x = 0;
var buttonText = 'LOADING';
$('#startbutton').click(function(){
$(this).text(buttonText);
window.setTimeout(addDotToButton,2000);
})
function addDotToButton(){
x++;
buttonText += '.';
$('#startbutton').text(buttonText);
if (x < 4) window.setTimeout(addDotToButton, 2000);
else location.reload(true);
}
假设你能够使用ECMAScript 2017,你可以通过使用async/await和setTimeout来模拟类似的行为。下面是一个睡眠函数的例子:
async function sleep(msec) {
return new Promise(resolve => setTimeout(resolve, msec));
}
然后你可以在任何其他异步函数中使用sleep函数,就像这样:
async function testSleep() {
console.log("Waiting for 1 second...");
await sleep(1000);
console.log("Waiting done."); // Called 1 second after the first console.log
}
这很好,因为它避免了需要回调。缺点是它只能在异步函数中使用。在后台,testSleep函数被暂停,在睡眠完成后,它将被恢复。
中数:
await表达式导致异步函数的执行暂停,直到 Promise被满足或拒绝,并恢复异步的执行 实现后的功能。
完整的解释见:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
为获得最佳解决方案,ecma脚本2017使用async/await语句
Await只能在async函数内部使用
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time || 1000);
});
}
await sleep(10000); //this method wait for 10 sec.
注意:async / await并不像thread那样实际停止线程。睡觉,但是要模拟
推荐文章
- Babel 6改变了它导出默认值的方式
- 在流中使用Java 8 foreach循环移动到下一项
- 如何配置历史记录?
- ES6模板文字可以在运行时被替换(或重用)吗?
- [Vue警告]:找不到元素
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 可以在setInterval()内部调用clearInterval()吗?
- AngularJS控制器的生命周期是什么?
- 无法读取未定义的属性“msie”- jQuery工具
- 如何配置slf4j-simple
- 我的蛋蛋怎么不见了?
- JavaScript中的排列?
- JavaScript中有睡眠/暂停/等待功能吗?
- 在Jar文件中运行类