对于 JavaScript 中的简单异步睡眠功能,await promisify(setTimeout)(ms)
可以!
但是怎么做?论据看起来是错误的。
- promisify传递一个错误回调,所以
- setTimeout调用将是
setTimeout(ms, errorCallback)
这不应该工作,但它确实有效。如何?
import { promisify } from 'util'
(async () => {
// const start = Date.now()
await promisify(setTimeout)(1000)
// console.log(Date.now() - start)
})()
node <<HEREDOC
(async () => {
// const start = Date.now();
await require('util').promisify(setTimeout)(1000);
// console.log(Date.now() - start);
})()
HEREDOC
背景:await setTimeout(() => {}, 1000)
不起作用。这个单线:await new Promise(resolve => setTimeout(resolve, 1000))
对我不起作用(为什么?)。我们可以手动承诺它:const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); await sleep(1000)
,但这是一个额外的功能。我们可以做得更好。