在Node.js中的睡眠
在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);