在JavaScript中,与Java的Thread.sleep()
相当的方法是什么?
在JavaScript中,与Java的Thread.sleep()
相当的方法是什么?
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
请注意,你特别不想进行繁忙等待(例如在自旋循环中),因为你的浏览器几乎肯定是在单线程环境中执行你的JavaScript。
以下是一些其他关于JavaScript线程的SO问题:
而这个问题也可能会有所帮助:
尝试使用这段代码。我希望它对你有用。
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
假设您能够使用 ECMAScript 2017,则可以通过使用 async/await 和 setTimeout 来模拟类似的行为。下面是一个 sleep 函数示例:
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函数被暂停,等待睡眠完成后恢复执行。
根据MDN文档:
等待表达式会导致异步函数的执行暂停,直到Promise被兑现或拒绝,并在兑现后恢复异步函数的执行。
详细说明请参见:
为了得到最佳解决方案,请使用ECMAScript 2017的async/await语句
只有在async函数内部才能使用await
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time || 1000);
});
}
await sleep(10000); //this method wait for 10 sec.
注意:async/await 实际上并不像 Thread.sleep 那样停止线程,而是模拟它
没有直接的等待功能,因为它会暂停网页。但是有一个setTimeout()函数,例如:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
您可以编写一个旋转循环(只是循环执行某种计算以延迟函数的循环),或者使用:
setTimeout("Func1()", 3000);
3秒后将调用'Func1()'。
编辑:
感谢评论者,但您可以将匿名函数传递给setTimeout。
setTimeout(function() {
//Do some stuff here
}, 3000);
这种方法更加高效,而且不需要调用JavaScript的eval函数。
setTimeout不会在您自己的线程上暂停和恢复,但Thread.sleep会。在Javascript中没有实际的等价物。
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);
}
yield
,可以用来“模拟”线程。请参考http://taskjs.org/获取示例库。 - snorbi