You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么util.promisify不需要传入回调函数调用后的返回值?

核心原因是util.promisify的输入要求是「函数本身」,而不是函数执行后的返回值

  • util.promisify是Node.js内置的函数转换器,作用是把符合错误优先回调风格的原始函数,包装成一个返回Promise的新函数,因此它的第一个入参必须是一个函数类型的值。

如果你写成promisify(opA())会触发两类错误:

  1. 直接执行opA()会立刻触发报错
    你写opA()就会立即调用这个函数,但此时你没有传入它要求的回调参数cb,等定时器到点执行cb(null, 'A')时,就会直接抛出TypeError: cb is not a function的错误。
  2. 传给promisify的参数不符合要求
    就算你强行给opA传入了一个临时回调避免第一个错误,opA本身也没有定义返回值,执行后默认返回undefined,promisify接收到非函数类型的入参时,会直接抛出类型校验错误:TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function. Received undefined,代码根本无法继续运行。

正确写法的执行逻辑:

你把opA这个函数本身传入promisify,得到的返回值a是一个新的包装函数:

  • 当你调用a()时,promisify内部会自动给原始的opA传入封装好的回调函数
  • 回调触发时会自动把结果转为Promise的resolve/reject状态,这样才能用await拿到返回的'A'/'B'/'C',也能捕获回调里抛出的错误。

内容的提问来源于stack exchange,提问作者Sandra Schlichting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:21:02