在JavaScript中,Java的Thread.sleep()相当于什么?

What's the equivalent of Java's Thread.sleep() in JavaScript?

本问题已经有最佳答案,请猛点这里访问。

JavaScript中Java的EDCOX1 0的等价物是什么?


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

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

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

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

这里还有几个其他的关于javascript中线程的so问题:

  • javascript和线程
  • 为什么javascript不支持多线程?

这个问题也可能有帮助:

  • setTimeout-如何避免使用字符串进行回调?


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

1
2
3
4
5
function sleep(seconds)
{
  var e = new Date().getTime() + (seconds * 1000);
  while (new Date().getTime() <= e) {}
}


假设您能够使用EcmaScript 2017,那么您可以通过使用Async/Wait和SetTimeout来模拟类似的行为。下面是一个睡眠功能示例:

1
2
3
async function sleep(msec) {
    return new Promise(resolve => setTimeout(resolve, msec));
}

然后您可以在任何其他异步函数中使用sleep函数,如下所示:

1
2
3
4
5
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:

The await expression causes async function execution to pause until a
Promise is fulfilled or rejected, and to resume execution of the async
function after fulfillment.

有关完整解释,请参阅:

  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/async_函数
  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/operators/await


没有直接的等价物,因为它会暂停网页。但是有一个setTimeout(),例如:

1
2
3
4
function doSomething() {
  thing = thing + 1;
  setTimeout(doSomething, 500);
}

关闭示例(感谢Daniel):

1
2
3
4
function doSomething(val) {
  thing = thing + 1;
  setTimeout(function() { doSomething(val) }, 500);
}

第二个参数是触发前的毫秒数,您可以将其用于时间事件或在执行操作之前等待。

编辑:根据注释更新以获得更清晰的结果。


您可以编写一个自旋循环(一个长时间循环的循环,执行某种计算来延迟函数),也可以使用:

1
setTimeout("Func1()", 3000);

这将在3秒后调用"func1()"。

编辑:

这归功于评论者,但您可以通过匿名函数来设置超时。

1
2
3
setTimeout(function() {
   //Do some stuff here
}, 3000);

这样做效率更高,并且不会调用javascript的eval函数。


为了获得最佳解决方案,请对ECMA脚本2017使用Async/Await语句

wait只能在异步函数内部使用

1
2
3
4
5
6
7
function sleep(time) {
    return new Promise((resolve) => {
        setTimeout(resolve, time || 1000);
    });
}

await sleep(10000); //this method wait for 10 sec.

注意:async/await实际上不是像thread.sleep那样停止线程,而是模拟它


不管thread.sleep如何,setTimeout不会在自己的线程上保持和恢复。在javascript中没有实际相等的


或者可以使用setinterval函数,在指定的毫秒数之后调用特定的函数。谷歌搜索一下setinterval原型,我不太记得了。


这最终帮助了我:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    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);
    }