实现函数 promisify
promisify
是 node
的 utils
模块中的一个函数,它作用就是为了转换最后一个参数是回调函数的函数为 promise
函数,且回调函数中有两个参数:error
和 data
一般用法
js
const util = require('node:util')
const fs = require('node:fs')
const stat = util.promisify(fs.stat)
stat('.')
.then((stats) => {
// Do something with `stats`
})
.catch((error) => {
// Handle the error.
})
手写实现
这里是一个简单的实现,还可以参考 es6-promisify
js
// const newFn = myPromisify(fn)
// newFn(a) 会执行 Promise 参数方法
const myPromisify = (fn) => {
// 返回一个包装函数
return function (...args) {
return new Promise((resolve, reject) => {
// 添加回调
args.push(function callback(err, ...values) {
if (err) {
return reject(err)
}
if (!values.length === 1) {
return resolve(values[0])
}
// 多个参数时,
// 这里 es6-promisify 中有 customArgumentsToken,
// 可转为使用对应 key 的对象格式的参数
resolve(values)
})
// 函数真正的执行的地方
fn.apply(this, args)
})
}
}
// testing