Node.js util.promisify() 方法
util.promisify()方法定义在 Node.js 标准库的实用程序模块中。它基本上用于将使用回调函数返回响应的方法转换为在 Promise 对象中返回响应。通常,由于回调嵌套或回调地狱,使用回调很快就会变得非常困难。组织或格式化我们的代码变得非常困难,以便其他开发人员在使用该代码时可以轻松理解它。另一方面,很容易处理承诺,因为嵌套承诺也以线性方式操作,即承诺链。 util.promisify() 方法为我们完成了这项工作,并使该方法与 Promise 一起运行。
句法:
util.promisify(func)
参数:此方法接受一个包含基于回调的函数的单个参数func 。
返回值:此方法返回一个基于 promise 的函数。
示例 1:
// Node.js program to illustrate
// util.promisify() methods
// Importing Utilities module
const util = require('util')
// Importing File System module
const fs = require('fs')
// Use promisify to convert callback
// based method fs.readdir to
// promise based method
const readdir = util.promisify(fs.readdir)
readdir('process.cwd()')
.then(files => {
console.log(files)
})
.catch(err => {
console.log(err)
})
输出:
[Error: ENOENT: no such file or directory,
scandir 'C:\Users\bhudk\Desktop\nodec\process.cwd()'] {
errno: -4058,
code: 'ENOENT',
syscall: 'scandir',
path: 'C:\\Users\\bhudk\\Desktop\\nodec\\process.cwd()'
}
示例 2:
// Node.js program to illustrate
// util.promisify() methods
// Since promisify function
// returns promise version
// of a function, it can also
// operate using async and await
// Importing Utilities module
const util = require('util')
// Importing File System module
const fs = require('fs')
// Use promisify to convert callback
// based method fs.readdir to
// promise based method
const readdir = util.promisify(fs.readdir)
const readFiles = async (path) => {
const files = await readdir(path)
console.log(files)
}
readFiles(process.cwd()).catch(err => {
console.log(err)
})
输出:
示例 3:
// Node.js program to illustrate
// util.promisify() methods
// Importing Utilities module
const util = require('util')
importing File System module
const fs = require('fs')
// Use promisify to convert
// callback based methods to
// promise based methods
const readdir = util.promisify(fs.readdir)
const lstat = util.promisify(fs.lstat)
const readFiles = async (path) => {
const files = await readdir(path)
for (let file of files) {
const stats = await lstat(file)
if (stats.isFile()) {
console.log(`${file} -----> File`)
} else {
console.log(`${file} -----> Folder`)
}
}
}
readFiles('process.cwd()').catch(err => {
console.log(err)
})
输出:
参考: https://nodejs.org/api/util.html#util_util_promisify_original