TypeError:util.promisify不是函数?

时间:2017-11-15 04:22:00

标签: javascript node.js reactjs promise

我试图在我的反应应用程序中宣传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:__ WWEPACK_IMPORTED_MODULE_8_util ___ default.a.promisify不是函数

我错过了什么?

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

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

3 个答案:

答案 0 :(得分:1)

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

n latest

在我的情况下节点9.2.0,因为这是后来添加的。

答案 1 :(得分:1)

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

  SELECT name
     , COUNT(*) AS total
     , 100 * COUNT(*)/s.total_sum AS percentage
  FROM games 
  CROSS JOIN (
     SELECT COUNT(*) AS total_sum 
     FROM games 
     WHERE gameStatus = 'win' 
       AND created_at > '2018-03-01 12:02:26'
  ) AS s
  WHERE gameStatus = 'win' 
    AND created_at > '2018-03-01 12:02:26'
  GROUP BY name
  ;

然后:

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

答案 2 :(得分:0)

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