Nig*_*ger 165 javascript java
什么相当于Thread.sleep()JavaScript中的Java ?
Dan*_*den 194
简单的答案是没有这样的功能.
你最接近的是:
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
Run Code Online (Sandbox Code Playgroud)
请注意,您特别不想忙等待(例如在旋转循环中),因为您的浏览器几乎肯定会在单线程环境中执行您的JavaScript.
以下是一些处理JavaScript中的线程的其他SO问题:
这个问题也可能有所帮助:
Dav*_*iró 64
尝试使用此代码.我希望它对你有用.
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*hrd 24
假设您能够使用ECMAScript 2017,则可以使用async/await和setTimeout模拟类似的行为.这是一个示例睡眠功能:
async function sleep(msec) {
return new Promise(resolve => setTimeout(resolve, msec));
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在任何其他异步函数中使用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
}
Run Code Online (Sandbox Code Playgroud)
这很好,因为它避免了需要回调.缺点是它只能用于异步功能.在幕后,testSleep函数暂停,在睡眠完成后,它将恢复.
来自MDN:
await表达式导致异步函数执行暂停,直到Promise被完成或拒绝,并在执行后继续执行async函数.
有关完整说明,请参阅:
没有直接的等价物,因为它会暂停一个网页.但是有一个setTimeout(),例如:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
Run Code Online (Sandbox Code Playgroud)
关闭示例(感谢Daniel):
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
Run Code Online (Sandbox Code Playgroud)
第二个参数是触发前的毫秒,您可以将其用于时间事件或在执行操作之前等待.
编辑: 根据注释更新,以获得更清晰的结果.
对于最佳解决方案,请为 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.
Run Code Online (Sandbox Code Playgroud)
注意:async / await 并没有像 Thread.sleep 那样实际停止线程而是模拟它
您可以编写一个自旋循环(一个仅长时间循环执行某种计算以延迟函数的循环)或使用:
setTimeout("Func1()", 3000);
Run Code Online (Sandbox Code Playgroud)
这将在 3 秒后调用“Func1()”。
编辑:
感谢评论者,但您可以将匿名函数传递给 setTimeout。
setTimeout(function() {
//Do some stuff here
}, 3000);
Run Code Online (Sandbox Code Playgroud)
这样效率更高,并且不会调用 javascript 的 eval 函数。
| 归档时间: |
|
| 查看次数: |
175787 次 |
| 最近记录: |