Thread.sleep()
JavaScript中 Java 的等价物是什么?
JavaScript 中 Java 的 Thread.sleep() 等价物是什么?
IT技术
java
javascript
2021-01-16 15:29:41
6个回答
简单的答案是没有这样的功能。
您拥有的最接近的东西是:
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 来模拟类似的行为。下面是一个睡眠函数示例:
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:
await 表达式导致异步函数执行暂停,直到 Promise 被履行或拒绝,并在履行后恢复异步函数的执行。
完整的解释见:
没有直接的等价物,因为它会暂停网页。但是有一个setTimeout(),例如:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
关闭示例(感谢 Daniel):
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
第二个参数是触发前的毫秒数,您可以将其用于时间事件或在执行操作之前等待。
编辑: 根据评论更新以获得更清晰的结果。
对于最佳解决方案,请为 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.sleep 那样实际停止线程而是模拟它
其它你可能感兴趣的问题