我如何等待在 Node.js (JavaScript)?l 需要暂停一段时间

2022-08-29 22:38:04

我正在开发一个满足个人需求的控制台脚本。我需要能够长时间暂停,但是,根据我的研究,Node.js没有办法根据需要停止。一段时间后,越来越难以阅读用户的信息...我见过一些代码,但我相信它们必须有其他代码才能工作,例如:

    setTimeout(function() {
    }, 3000);

但是,我需要在一段时间后执行此行代码之后的所有内容。

例如

    // start of code
    console.log('Welcome to my console,');

    some-wait-code-here-for-ten-seconds...

    console.log('Blah blah blah blah extra-blah');
    // end of code

我也见过这样的事情

    yield sleep(2000);

但是Node.js没有意识到这一点。

如何实现此延长暂停时间?


答案 1

2021年1月更新:您甚至可以在Node REPL交互式中使用标志进行此操作--experimental-repl-await

$ node --experimental-repl-await
> const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
> await delay(1000) /// waiting 1 second.

对旧问题的新答案。今天(2017年1月2019年6月)它要容易得多。可以使用新的异步/等待语法。例如:

async function init() {
  console.log(1);
  await sleep(1000);
  console.log(2);
}

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

要在不安装和插件的情况下开箱即用地使用异步/等待,您必须使用 node-v7 或 node-v8,使用 --harmony 标志。

2019 年 6 月更新:通过使用最新版本的NodeJS,您可以开箱即用地使用它。无需提供命令行参数。甚至谷歌浏览器今天也支持它。

2020年5月更新:很快,您将能够在异步函数之外使用语法。在顶层,如本例所示await

await sleep(1000)
function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

该提案处于第3阶段。您今天可以通过使用webpack 5(alpha)来使用它,

更多信息:


答案 2

没有任何依赖关系的最短解决方案:

await new Promise(resolve => setTimeout(resolve, 5000));