推荐答案
-- -------------------- ---- ------- -------- ------------- - ------ ----------------- - ------ --- ----------------- ------- -- - ----------- ----- ------- -- - -- ----- - ------------ - ---- - ---------------- - --- --- -- -
本题详细解读
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
的形式:
const fs = require('fs'); const readFilePromise = promisify(fs.readFile); readFilePromise('example.txt', 'utf8') .then(data => console.log(data)) .catch(err => console.error(err));
在这个示例中,readFilePromise
是一个返回 Promise
的函数,可以使用 .then
和 .catch
来处理成功和失败的情况。