📜  如何在继续使用 JavaScript 之前添加睡眠/等待函数?

📅  最后修改于: 2022-05-13 01:56:53.507000             🧑  作者: Mango

如何在继续使用 JavaScript 之前添加睡眠/等待函数?

与其他语言不同,JavaScript 没有任何方法来模拟 sleep()函数。有一些方法可以用来模拟睡眠函数。

方法一:使用无限循环不断检查经过的时间
睡眠函数开始的时间首先是使用新的 Date().getTime() 方法找到的。这将返回自 Epoch 时间以来经过的毫秒数。

一个无限的while循环开始了。通过用开始时间减去当前时间来计算经过的时间。 If 语句检查经过的时间是否大于给定时间(以毫秒为单位)。在满足条件时,将执行一个 break 语句,跳出循环。 sleep函数现在结束,在 sleep函数之后编写的代码行现在将执行。

这种使用无限循环的睡眠类型会停止脚本其余部分的处理,并可能导致浏览器发出警告。不建议长时间使用这种类型的睡眠函数。

句法:

function sleep(milliseconds) {
    let timeStart = new Date().getTime();
    while (true) {
      let elapsedTime = new Date().getTime() - timeStart;
      if (elapsedTime > milliseconds) {
        break;
      }
    }
  }

例子:



  

    
        JavaScript | sleep/wait before continuing
    

  

    

GeeksforGeeks

    JavaScript | sleep/wait before continuing     

        A sleep of 5000 milliseconds is simulated.        Check the console for the output.     

       

输出:

  • 睡觉前:
    无限循环之前
  • 休眠 5000 毫秒后:
    无限循环后

方法 2:创建一个新的 Promise 并使用 then() 方法
创建了一个新的 Promise,其中包含一个 setTimeout()函数。 setTimeout()函数用于在指定时间后执行函数。 Promise 的已解决状态在 setTimeout()函数中使用,以在超时后完成它。

then() 方法可用于在 Promise 完成后执行所需的函数。这模拟了函数的等待时间。

此方法不会阻止 JavaScript 的异步特性,是延迟函数的首选方法。由于使用了 Promises,它也仅受 ES6 标准支持。

句法:

const sleep = milliseconds => {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
};
 
sleep(timeToSleep).then(() => {
  // code to execute after sleep
});

例子:



  

    
        JavaScript | sleep/wait before continuing
    

  

    

GeeksforGeeks

    JavaScript | sleep/wait before continuing     

        A sleep of 5000 milliseconds is       simulated. Check the console for the output.     

       

输出:

  • 睡觉前:
    承诺之前
  • 休眠 5000 毫秒后:
    承诺后