promisify
是 Node.js 标准库 util
模块中的一个函数。它用于将遵循 Node.js 回调风格的函数转换为返回 Promise 的函数。这使得你可以使用 async/await
语法来等待异步操作完成,从而让异步代码看起来更像同步代码。
在 Node.js 的回调风格中,函数通常接受一个回调函数作为最后一个参数。这个回调函数的第一个参数是一个错误对象,用于表示操作失败,其余的参数用于表示操作的结果。例如,Redis 客户端的 client.get
方法的回调函数接受两个参数:err
和 reply
。
使用 promisify
,你可以把这样的函数转换为一个返回 Promise 的函数。这个 Promise 在成功时解析为原回调函数的 reply
参数,在失败时拒绝为 err
参数。
下面是一个简单的示例:
const { promisify } = require('util');
// 假设这是一个遵循 Node.js 回调风格的异步函数
function myAsyncFunction(arg1, arg2, callback) {
// ... 异步操作
// 成功时
// callback(null, result);
// 或失败时
// callback(new Error("Something went wrong"));
}
// 使用 promisify 转换为返回 Promise 的函数
const myAsyncFunctionPromise = promisify(myAsyncFunction);
// 现在你可以使用 async/await
async function doSomething() {
try {
const result = await myAsyncFunctionPromise('arg1', 'arg2');
console.log(result);
} catch (err) {
console.log(`Error: ${err.message}`);
}
}
这样,你就可以在异步函数中使用 await
关键字来等待 myAsyncFunctionPromise
函数完成,而不必使用回调。这通常会使代码更易读和维护。