Node.js 内置的 util
模块有一个 promisify() ,该方法将基于回调的函数转换为基于 Promise 的函数。这使您可以将 Promise 链和 async/await
与基于回调的 API 结合使用。
例如,Node.js 的 fs
模块在读取文件时,需要使用回调:
const fs = require('fs')
fs.readFile('./package.json', function callback(err, buf) {
const obj = JSON.parse(buf.toString('utf8'))
console.log(obj.name)
可以使用 util.promisify()
将 fs.readFile()
的回调函数转换为返回 Promise 函数:
const fs = require('fs')
const util = require('util')
// 将 fs.readFile() 转换为一个接受相同参数但返回 Promise 的函数。
const readFile = util.promisify(fs.readFile)
// 现在可以将 readFile() 与 await 一起使用!
const buf = await readFile('./package.json')
const obj = JSON.parse(buf.toString('utf8'))
console.log(obj.name)