📜  Node.js util.promisify() 方法

📅  最后修改于: 2022-05-13 01:56:39.237000             🧑  作者: Mango

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