我正在为个人需求开发一个控制台脚本。我需要能够暂停很长时间,但是,根据我的研究,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 不承认这一点。
我怎样才能实现这种延长的暂停?
2021 年 1 月更新 :您甚至可以在 Node REPL 交互式使用--experimental-repl-await标志中进行操作
--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/await语法。例如:
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开箱即用,您必须使用 node-v7 或 node-v8,使用--harmony标志。
--harmony
2019 年 6 月更新: 通过使用最新版本的 NodeJS,您可以立即使用它。无需提供命令行参数。今天甚至谷歌浏览器也支持它。
2020 年 5 月更新: 很快您将能够在await异步函数之外使用语法。在这个例子中的顶层
await
await sleep(1000) function sleep(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); }
该提案处于第 3 阶段。您现在可以通过使用 webpack 5 (alpha) 来使用它,
更多信息: