JavaScript中Java的Thread.sleep()等效于什么?[重复]

2020/10/21 17:41 · javascript ·  · 0评论

JavaThread.sleep()在JavaScript中相当于什么

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

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

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:

等待表达式使异步函数执行暂停,直到实现或拒绝Promise,并在实现后恢复执行异步函数。

有关完整说明,请参见:

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

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

闭包示例(感谢Daniel):

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

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

编辑: 根据评论进行了更新,以获得更清晰的结果。

您可以编写自旋循环(一个循环很长一段时间以执行某种计算以延迟功能的循环)或使用:

setTimeout("Func1()", 3000);

3秒后将调用“ Func1()”。

编辑:

感谢评论者,但您可以将匿名函数传递给setTimeout。

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

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

为了获得最佳解决方案,请对ecma脚本2017使用async / 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这样实际上停止了线程,而是对其进行仿真

setTimeout不会在您自己的线程上保持并继续运行,但是Thread.sleep可以。Javascript中没有实际的对等

或者,您可以在指定的毫秒数后使用setInterval函数来调用特定函数。只是用谷歌搜索setInterval原型。我不太记得它。

这最终帮助了我:

    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);
    }
本文地址:http://javascript.askforanswer.com/javascriptzhongjavadethread-sleepdengxiaoyushenmezhongfu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!