我如何在Nodejs中执行主动睡眠/超时?

时间:2018-07-19 07:31:10

标签: node.js settimeout sleep

我知道Javascript是单线程的,阻塞事件循环不是正确的方法。但是我想知道是否有一种方法可以执行类似public function sendMessage(Request $request, $conversationId) { $request->merge(['conversation_id' => $conversationId]); return $this->conversationService->sendMessage(Auth::user(), $request->all()); } 的操作来模拟需要很长时间才能执行的代码。

出于调试目的,我需要这样做。

3 个答案:

答案 0 :(得分:0)

您可以使用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');

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

我使用这样的东西:

//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