对于 JavaScript 中的简单异步 sleep 函数,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)
doesn't work .这one-liner : await new Promise(resolve => setTimeout(resolve, 1000))
对我不起作用(为什么?)。我们可以promisify it manually : const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); await sleep(1000)
,但这是一个 extra function .我们可以做得更好。
最佳答案
这是因为setTimeout
有a custom promisified function现在。你可以在打印setTimeout
时找到它。
> console.log(setTimeout)
{ [Function: setTimeout] [Symbol(util.promisify.custom)]: [Function] }
undefined
采用非标准方式进行回调的常见函数可能具有自定义 promise 函数,并且当函数具有自定义 promise 函数时,util.promisify
返回它。
关于javascript - 缺少回调时 `await promisify(setTimeout)(ms)` 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63496666/