在Node.js中的睡眠

13 浏览
0 Comments

在Node.js中的睡眠

假设没有“本地”的方法来实现这一点,我的解决方案如下:

sleep = function(time) {
    var stop = new Date().getTime();
    while(new Date().getTime() < stop + time) {
        ;
    }
    return new Promise((r,_)=> r())
}

因此,执行`sleep(1000*3).then(()=>console.log("awake"))`将会休眠3秒钟,然后解决`Promise`:

(请注意,它会在一秒钟内冻结这个页面)

sleep = function(time) {
  var stop = new Date().getTime();
  while (new Date().getTime() < stop + time) {;
  }
  return new Promise((r, _) => r())
}
console.log("sleeping...")
sleep(1000 * 1).then(() => console.log("awake"))

假设这将在主线程中运行,它将冻结主进程,因此执行

sleep(1000*1).then(()=>console.log("awake")); console.log("Hello")

将会得到以下输出:

VM2628:1 Hello
VM2628:1 awake

在休眠的最后。当然,执行

setTimeout(()=>sleep(1000*3).then(()=>console.log("awake")),1000);console.log("Hello")
VM2815:1 Hello
undefined
VM2815:1 awake

会使它异步化,但它不能解决我的需求(将主进程放入`sleep`中)。

有更好的方法吗?

【更新】

将其转为`Promise`的版本:

/**
 * 休眠一段时间(毫秒)
 * @param time int 毫秒
 * @return Promise 延迟解决
 * @使用方法
    sleep(1000*3).then(()=>console.log("awake"))
 */
sleepP: function (time) {
  return new Promise((resolve, reject) => {
    var stop = new Date().getTime();
    while (new Date().getTime() < stop + time) {
      ;
    }
    return resolve(true)
  });
}

可以这样调用:

await sleepP(1000 * 3);

0