JavaScript 中 Java 的 Thread.sleep() 等价物是什么?

IT技术 java javascript
2021-01-16 15:29:41

Thread.sleep()JavaScript中 Java 的等价物是什么

6个回答

简单的答案是没有这样的功能。

您拥有的最接近的东西是:

var millisecondsToWait = 500;
setTimeout(function() {
    // Whatever you want to do after the wait
}, millisecondsToWait);

请注意,您尤其不想忙等待(例如在自旋循环中),因为您的浏览器几乎肯定会在单线程环境中执行您的 JavaScript。

以下是一些处理 JavaScript 线程的其他 SO 问题:

这个问题也可能有帮助:

抓得好,史蒂夫。我已经编辑了我的答案以反映您的评论。
2021-03-23 15:29:41
使用“setTimeout”不会停止 javascript 线程并等待。只有当调用堆栈为空时才开始计数。但这取决于您想要使用哪种方法的意图。
2021-03-27 15:29:41
ES6 将有一个新的运算符yield,可用于“模拟”线程。有关示例库,请参阅taskjs.org
2021-03-29 15:29:41
为了促进良好的编码实践,最好在“500”之后插入一个分号并在代码示例中初始化“millisecondsToWait”(例如在它前面加上“var”)(这样,如果有人复制并粘贴了示例,他们最终不会得到一个隐含的全局)。
2021-04-06 15:29:41
(+1) 看看 javascript 中的 setTimeout() 和 setInterval()
2021-04-09 15:29:41

尝试使用此代码。我希望它对你有用。

function sleep(seconds) 
{
  var e = new Date().getTime() + (seconds * 1000);
  while (new Date().getTime() <= e) {}
}
“thread.distract”
2021-03-22 15:29:41
这是一个“忙等待”,也就是你在“烧线程”
2021-03-23 15:29:41
对于我的单元测试目的,它很有用。当然,不是用于生产。
2021-03-26 15:29:41
这不会让线程进入睡眠状态,它只会消耗线程并进行可能会阻塞 UI 的浪费计算。不建议。
2021-03-30 15:29:41
做它应该做的
2021-04-04 15:29:41

假设您能够使用 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 被履行或拒绝,并在履行后恢复异步函数的执行。

完整的解释见:

太好了,救了我的命!
2021-03-22 15:29:41
这是 2017 年的推荐方法
2021-04-02 15:29:41
2020 年也一样 :)
2021-04-14 15:29:41

没有直接的等价物,因为它会暂停网页。但是有一个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 那样实际停止线程而是模拟它

复制其他答案不好
2021-04-04 15:29:41