Node.js – util.promisify() 方法


util.promisify() 方法主要以一个函数作为输入,该函数遵循通用的 Node.js 回调风格,即具有一个 (err, value),并返回其版本,该版本返回一个 promise,而不是回调。

语法

util.promisify(original)

参数

它只采用一个参数 −

  • original −此参数获取函数的输入,并将其作为 promise 返回。

示例 1

创建一个名为 "promisify.js" 的文件,并复制以下代码片段。创建文件后,使用命令 "node promisify.js" 运行此代码。

// util.promisify() Demo example

// Importing the fs and util modules
const fs = require('fs');
const util = require('util');

// Reading the file using a promise & printing its text
const readFile = util.promisify(fs.readFile);
readFile('./promisify.js', 'utf8') // Reading the same file
   .then((text) => {
      console.log(text);
   })

// Printing error if any
   .catch((err) => {
      console.log('Error', err);
});

在上面的示例中,我们已使用 fs 模块读取文件。我们已使用 util.promisify() 方法将 fs.readFile 转换为基于 promise 的方法。现在,上述方法为我们提供了 promise,而不是回调。Promise 进一步提供了两个方法 "then""catch",用于获取函数结果。

输出

C:\home
ode>> node promisify.js // util.promisify() Demo example // Importing the fs and util modules const fs = require('fs'); const util = require('util'); // Reading the file using a promise & printing its text const readFile = util.promisify(fs.readFile); readFile('./util.js', 'utf8')    .then((text) => {       console.log(text);    })    // Printing error if any    .catch((err) => {       console.log('Error', err); });

示例 2

我们来看一个更高级的示例

// util.promisify() Demo example

// Importing the fs and util modules
const util = require('util')
const fs = require('fs')

// Changing from callback to promise based
const readdir = util.promisify(fs.readdir)

// Reading files
const readFiles = async (path) => {
   const files = await readdir(path)
   // Printing current working directory
   console.log(files) //Print all files on current working directory
   console.log(process.cwd())
}

readFiles(process.cwd()).catch(err => {
      console.log(err)
})

输出

C:\home
ode>> node promisify.js [    'app.js',    'index.html',    'node_modules',    'package-lock.json',    'package.json',    'promisify.js', C:\home
ode

更新于: 18-8-2021

5K+ 阅读量

开场 职业生涯

通过完成课程获得认证

开始
广告