📜  Node.js util.callbackify() 方法(1)

📅  最后修改于: 2023-12-03 15:17:56.042000             🧑  作者: Mango

Node.js util.callbackify() 方法

在 Node.js 中,有时候我们需要将一个遵循error-first规范的函数封装成返回一个Promise的函数。Node.js 自带了一个可以实现这个功能的工具函数:util.callbackify()

什么是 error-first 规范

在 Node.js 中,很多函数都遵循 error-first 规范,也被称为 node-style 回调。

这个规范要求回调函数的第一个参数永远是一个 error 对象(如果没有错误,则为 null 或 undefined)。

以下是一个使用了 error-first 规范的回调函数的简单示例:

function readFile(path, callback) {
  fs.readFile(path, (err, data) => {
    if (err) {
      callback(err);  // error-first: 回调函数的第一个参数永远是一个 error 对象
    } else {
      callback(null, data); // 回调函数的第二个参数是成功时的回调数据
    }
  });
}
util.callbackify() 方法

util.callbackify(original) 方法接受一个遵循 error-first 规范的函数 original 作为参数,将其转换成一个具有相同行为但回调函数使用 Node.js 兼容的方式进行调用的新函数。

以下是一个使用 util.callbackify() 的简单示例:

const util = require('util');
const fs = require('fs');

const readFilePromise = util.promisify(fs.readFile); // 先将原本的 readFile 封装成 Promise 函数
const readFile = util.callbackify(readFilePromise);   // 再将 Promise 函数封装成 error-first 规范的回调函数

readFile('example.txt', (err, data) => {
  if (err) {
    console.error(`文件读取出错:${err}`);
  } else {
    console.log(`文件内容:${data}`);
  }
});
注意事项
  • util.callbackify() 对于异步函数的调用,必须采用回调函数的方式进行调用,否则可能出现无法完成回调的情况。

  • 被转换成 error-first 规范的回调函数,可以传入多个参数,但最后一个参数必须是错误对象。

总结
  • util.callbackify() 方法能够将遵循 error-first 规范(也被称为 node-style 回调)的函数转换成 Promise 函数,方便异步编程。

  • 使用 util.callbackify() 方法需要注意,转换后的函数必须按照 error-first 规范的方式调用,否则可能出现无法完成回调的情况。