Javascript 在Node.js中睡眠

Javascript 在Node.js中睡眠,javascript,node.js,multithreading,sleep,Javascript,Node.js,Multithreading,Sleep,假设没有“本地”方法来实现这一点,我的解决方案是 sleep = function(time) { var stop = new Date().getTime(); while(new Date().getTime() < stop + time) { ; } return new Promise((r,_)=> r()) } 根本没有必要冻结。由于javascripts的异步性,我

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

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

根本没有必要冻结。由于javascripts的异步性,我们可以将部分代码保留一段时间,稍后再继续。首先,我们需要一个有前途的计时器:

 const timer = ms => new Promise( res => setTimeout(res, ms));
然后我们可以简单地使用它:

console.log("wait 3 seconds")
timer(3000).then(_=>console.log("done"));
或者加一点语法糖:

(async function(){
  console.log("wait 3 seconds");
  await timer(3000);
  console.log("done");
})()

如果你真的想冻结(非常糟糕),你根本不需要承诺:

function freeze(time) {
    const stop = new Date().getTime() + time;
    while(new Date().getTime() < stop);       
}

console.log("freeze 3s");
freeze(3000);
console.log("done");
功能冻结(时间){
const stop=new Date().getTime()+时间;
while(new Date().getTime()
为什么要将JS解释器冻结3秒钟?为什么不像设计语言那样异步编程,而不必冻结任何东西?