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

推荐答案

-- -------------------- ---- -------
-------- ------------- -
  ------ ----------------- -
    ------ --- ----------------- ------- -- -
      ----------- ----- ------- -- -
        -- ----- -
          ------------
        - ---- -
          ----------------
        -
      ---
    ---
  --
-

本题详细解读

1. 函数定义

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

2. 返回的函数

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

3. Promise 的创建

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

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 来处理成功和失败的情况。

纠错
反馈