如何使用 ES6 在 Node.js v9+ 中休眠

How to sleep in Node.js v9+ with ES6

现在是 2018 年,调制解调器节点是版本 9 或 10,即 接受 来自 How Can I Wait In Node.js in year 2013 is no good any more. Hence I'm asking it again, as per the guidance of meta here 的回答。

现在答案的标准是使用现有的 ES6 和 Node.js v9+ 功能,而不需要任何额外的包。

我在 找到了@treecoder 的答案 特别有趣,但我无法让它适用于我的情况:

$ node
> const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

> const waitThenDo = async (howLong, doWhat) => await sleep(howLong*1000).then(doWhat)

> waitThenDo(1, console.log(2))
2
Promise {
  <pending>,
 ... 

waitThenDo 立即打印,没有任何延迟。

我做错了什么,and/or,有什么最新的技术最好wait/sleep?

promise 的 then 方法需要一个函数:

waitThenDo(1, () => console.log(2))

您也可以这样做:

const waitThenDo = async (howLong, doWhat) => {
  await sleep(howLong*1000)
  doWhat()
}

waitThenDo(1, () => console.log(2))