如何在Node.js(JavaScript)中等待? 我需要暂停一段时间。
如何在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日
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(阿尔法版)来使用它。
更多信息:
- Nodejs中的Harmony标记:https://nodejs.org/en/docs/es6/
- 所有NodeJS版本下载:https://nodejs.org/en/download/releases/