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

17 浏览
0 Comments

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

我正在为个人需求开发控制台脚本。我需要能够暂停很长一段时间,但是从我的研究来看,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不认识它。

如何实现这种长时间的暂停?

admin 更改状态以发布 2023年5月23日
0
0 Comments

最短的解决方案,没有任何依赖项:

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

0
0 Comments

2021年1月更新:你甚至可以使用--experimental-repl-await标记在Node REPL互动环境中执行它。

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

对于一个老问题的新回答。现在(2017年1月 2019年6月)变得更加简单,你可以使用新的async/await语法
例如:

async function init() {
  console.log(1);
  await sleep(1000);
  console.log(2);
}
function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

如果要使用带有async/await且不需要安装插件的NodeJS(版本v7或v8),则需要使用--harmony标记。

2019年6月更新:通过使用NodeJS的最新版本,您可以直接使用它,无需提供命令行参数。即使在Google Chrome中今天也支持它。
2020年5月更新:
不久之后,您将能够在异步函数之外使用await语法,例如在此示例中的顶层。

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

该提案处于第三阶段。你可以使用webpack 5(阿尔法版)来使用它。

更多信息:

0