util.js 里的 promisify 函数可以把常规的,最后一个参数为回调函数的函数转化为 promise

const util = require('util');

const fn = (param, callback) => {
  callback('err', param)
};

var fnTest = util.promisify(fn)

(async function () {

  const x = await ffnTest(1)
  
  console.log(x);

})();

另一个功能是可以使用 util.promisify.custom 符号重写 util.promisify 返回值。

const fn = (param, callback) => {
  callback('err', param)
};

fn[util.promisify.custom] = (e, r) => {
  return Promise.resolve('这是自定义返回');
};

var fnTest = util.promisify(fn)

(async function () {

  const x = await fnTest(1)
  console.log(x);

})();

另外一个叫 callbackfy 的函数正好相反,可以把 promise 轩化为回调函数

async function ff() {
  return 999
}

const fff = util.callbackify(ff);

fff((err, ret) => {
  console.log(err, ret)
})