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

时间:2009-09-19 01:06:04

标签: java javascript

JavaScript中的Thread.sleep()等同于什么?

9 个答案:

答案 0 :(得分:186)

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

你最接近的是:

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

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

以下是一些其他涉及JavaScript中线程的SO问题:

这个问题也可能有所帮助:

答案 1 :(得分:59)

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

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

答案 2 :(得分:14)

假设您能够使用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表达式导致异步函数执行暂停直到a   承诺得到满足或拒绝,并继续执行异步   履行后的功能。

有关完整说明,请参阅:

答案 3 :(得分:7)

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

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

关闭示例(感谢Daniel):

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

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

修改:根据有关更清晰结果的评论进行更新。

答案 4 :(得分:4)

你可以编写一个自旋循环(一个循环只需要长时间循环执行某种计算来延迟函数)或使用:

setTimeout("Func1()", 3000);

这将在3秒后调用'Func1()'。

编辑:

积分转到评论者,但您可以将匿名函数传递给setTimeout。

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

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

答案 5 :(得分:2)

setTimeout不会在你自己的线程上保持和恢复,但Thread.sleep会这样做。 Javascript中没有实际的等价

答案 6 :(得分:2)

要获得最佳解决方案,请使用ecma脚本2017的async / await语句

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那样的实际停顿线程但是模拟它

答案 7 :(得分:0)

或许你可以使用setInterval函数,在指定的毫秒数后调用特定的函数。只是为setInterval原型做一个谷歌。我不记得了。

答案 8 :(得分:-1)

这最终帮助了我:

    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);
    }