可以使用 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包装原始函数的调用,把原本的回调替换成resolve和reject,从而实现 Promise 化。
这样,writeFileAsync 就可以像 Promise 一样使用了。