前端手写代码面试题
目录

实现一个函数 promisify(fn),将一个基于回调的异步函数转换为 Promise 形式

· 约 3 分钟读完 · 第 25 / 125 章

推荐答案

本题详细解读

1. 函数定义

promisify 函数接收一个基于回调的异步函数 fn 作为参数,并返回一个新的函数。这个新函数将 fn 转换为返回 Promise 的形式。

2. 返回的函数

返回的函数接受任意数量的参数 ...args,这些参数将传递给原始的 fn 函数。

3. Promise 的创建

在返回的函数内部,创建一个新的 Promise 对象。这个 Promise 的构造函数接收两个参数:resolve 和 reject,分别用于处理成功和失败的情况。

4. 调用原始函数

在 Promise 的构造函数内部,调用原始的 fn 函数,并将 ...args 传递给它。同时,传递一个回调函数作为 fn 的最后一个参数。这个回调函数遵循 Node.js 的约定,即第一个参数是错误对象 err,第二个参数是结果 result。

5. 处理回调

在回调函数中,检查 err 是否存在。如果 err 存在,则调用 reject(err) 将 Promise 标记为失败状态。如果 err 不存在,则调用 resolve(result) 将 Promise 标记为成功状态,并将结果 result 传递给 resolve。

6. 使用示例

假设有一个基于回调的异步函数 readFile,可以使用 promisify 将其转换为返回 Promise 的形式:

在这个示例中,readFilePromise 是一个返回 Promise 的函数,可以使用 .then 和 .catch 来处理成功和失败的情况。