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.
一个对一个老问题的新答案。今天(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
,您必须使用node-v7或node-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(alpha版)来使用它,
在此之前,您可以将脚本包装在一个自调用的异步函数中:
(async function() {
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
console.log(1)
await sleep(1000)
console.log(2)
})()
更多信息:
require("child_process").execSync('php -r "sleep($argv[1]);" ' + seconds);
意思是通过Node.js的child_process模块执行一条命令,即在PHP中运行一个代码段来使程序等待指定的秒数。 - Haitham Sweilemimport { setTimeout } from 'timers/promises'
。 - Nick Grealy