面试官:实现一个 promisify 函数,把 nodejs 原生的 writeFile Promise 化

133 阅读1分钟

可以使用 promisify 函数将 Node.js 的回调风格 API 转换为 Promise 风格。Node.js 自带 util.promisify 方法来实现这个转换,但如果我们手动实现 promisify,可以参考以下代码:

自定义实现 promisify 函数

const fs = require('fs');

// 自定义 promisify 函数
function promisify(fn) {
  return function (...args) {
    return new Promise((resolve, reject) => {
      fn(...args, (err, result) => {
        if (err) {
          reject(err);
        } else {
          resolve(result);
        }
      });
    });
  };
}

// 使用自定义的 promisify
const writeFileAsync = promisify(fs.writeFile);

// 调用示例
writeFileAsync('example.txt', 'Hello, World!')
  .then(() => console.log('File written successfully'))
  .catch((error) => console.error('Error writing file:', error));

解释

  • promisify 函数接受一个带有回调的函数 fn,返回一个新的函数。
  • 在返回的函数中,使用 Promise 包装原始函数的调用,把原本的回调替换成 resolvereject,从而实现 Promise 化。

这样,writeFileAsync 就可以像 Promise 一样使用了。