【问题标题】:Ho do I perform an active sleep/timeout in Nodejs? [closed]如何在 Nodejs 中执行主动睡眠/超时? [关闭]
【发布时间】:2018-07-19 07:31:10
【问题描述】:

我知道 Javascript 是单线程的,阻塞事件循环不是正确的方法。但我想知道是否有一种方法可以执行类似sleep(5000ms) 的操作来模拟需要很长时间才能执行的代码。

我需要这个来进行调试。

【问题讨论】:

  • 你想阻止事件循环还是不应该阻止事件循环?
  • 据我了解,您希望将庞大的计算转换为异步。你可以使用 setTimeout。以及 async(caolan.github.io/async) 库都会很有用。

标签: node.js settimeout sleep


【解决方案1】:

简洁明了,你可以使用while循环来检查时间流逝。

function stopForN(ms){
    var sts = Date.now();

    while((Date.now() - sts) < ms){}console.log('finished');
}
stopForN(1000);
    

【讨论】:

    【解决方案2】:

    您可以使用while 循环来模拟睡眠,如下所示,

    它将阻塞事件循环大约5s

    function sleep(interval) {
        let d = new Date().getTime();
        while (true) {
            let d1 = new Date().getTime();
            if (d1 - d >= interval) {
                return;
            }
        }
    }
    sleep(5000);
    console.log('after interval');

    【讨论】:

      【解决方案3】:

      我不确定这是否是你真正想要的,但我在测试中使用这个库让测试认为时间已经过去,当你用计时器测试代码时它非常有用。

      我使用这样的东西:

      //before the test
      var clock = lolex.install();
      
      //make the code think a second had passed
      clock.tick(1000);
      
      //after the test
      clock.uninstall();
      

      https://github.com/sinonjs/lolex

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        • 2019-03-02
        • 2022-01-03
        • 2017-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多