【问题标题】:Ho do I perform an active sleep/timeout in Nodejs? [closed]如何在 Nodejs 中执行主动睡眠/超时? [关闭]
【发布时间】:2018-07-19 07:31:10
【问题描述】:
我知道 Javascript 是单线程的,阻塞事件循环不是正确的方法。但我想知道是否有一种方法可以执行类似sleep(5000ms) 的操作来模拟需要很长时间才能执行的代码。
我需要这个来进行调试。
【问题讨论】:
标签:
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