【问题标题】:TypeError: util.promisify is not a function?TypeError: util.promisify 不是一个函数?
【发布时间】:2018-04-28 04:49:15
【问题描述】:

我正在尝试在我的反应应用程序中承诺 zlib.gunzip

const zlib = require('zlib')
const util = require('util')

const gunzipPromisified = util.promisify(zlib.gunzip)

但我收到此错误:

TypeError: util.promisify 不是函数

如果我将它放在一个独立的脚本文件中并通过node 运行它,那效果很好。

如果我尝试:

import zlib from 'zlib'
import util from 'util'

const gunzipPromisified = util.promisify(zlib.gunzip)

我得到了更漂亮的东西:

TypeError: __WEBPACK_IMPORTED_MODULE_8_util___default.a.promisify 不是函数

我错过了什么?

[编辑]我笔记本电脑上安装的node.js版本是8.9.1。

[编辑] 正如有人评论的那样,我本地开发环境中安装的 node.js 与应用程序代码在浏览器中可以访问的内容无关。所以现在我的问题是,如何确定我可以在浏览器中访问哪些 API?

【问题讨论】:

  • @JaromandaX 安装的node.js 是8.9.1,但我也发现我的项目中有一个node_module/util,即0.10.3。那东西是否覆盖了安装的 node.js 中的 util 模块?
  • @JaromandaX 我明白你的意思。我也很怀疑。 OTOH,zlib,也是一个 node.js 标准模块,显然可用于应用程序代码。所以我也很困惑:-)
  • 你找到答案了吗?
  • @Ari 是的,见下文

标签: javascript node.js reactjs promise


【解决方案1】:

我在 Ionic 中遇到了同样的问题。 util promisify 对我也不起作用,并且产生了与 OP 相同的错误。我最终使用了下面复制的this simple solution

const promisify = (fn) => {
 return (...args) => {
    return new Promise((resolve, reject)=>{
      fn(...args, function(err, res){
        if(err){
          return reject(err);
        }
        return resolve(res);
      })
    })
  }
}

然后:

const requestPromisified = promisify(request)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,通过将 Node 更新到高于 Node 7 的版本来解决。

    n latest
    

    在我的例子中是 Node 9.2.0,因为这是后来添加的。

    【讨论】:

    • 你是对的。由于未定义命令“n”,我使用了以下命令:nvm use 8
    【解决方案3】:

    当然,当我切换到 bluebird 的 Promise 时,一切正常。

    【讨论】:

      猜你喜欢
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2023-02-01
      • 2018-07-22
      • 2016-07-12
      • 2021-07-21
      • 2019-10-15
      相关资源
      最近更新 更多