Javascript 使用Node.js util模块演示所有方法

Javascript 使用Node.js util模块演示所有方法,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个redis util,看起来像: const redis = require('redis') const { promisify } = require('util') const client = redis.createClient({ host: '127.0.0.1', port: '6379' }) module.exports = { get: promisify(client.get).bind(client), hget: promisify(clie

我有一个redis util,看起来像:

const redis = require('redis')
const { promisify } = require('util')
const client = redis.createClient({
  host: '127.0.0.1',
  port: '6379'
})

module.exports = {
  get: promisify(client.get).bind(client),
  hget: promisify(client.hget).bind(client),
  set: promisify(client.set).bind(client),
  mset: promisify(client.mset).bind(client),
  hset: promisify(client.hset).bind(client),
  hmset: promisify(client.hmset).bind(client),
  ...
}
我想重写这个,不要重复。如何在每个方法上迭代
promisify
导出客户机函数

最初,我查看了
Object.keys(客户端)
Object.getOwnPropertyNames(客户端)
,作为获取要映射的方法名称的起点,但这两个数组都不包含它们

编辑:这更接近,有没有更好的表达方式

const promisifiedClient = {}

for (const fn in Object.getPrototypeOf(client)) {
  if (typeof client[fn] === 'function') {
    promisifiedClient[fn] = promisify(client[fn]).bind(client)
  }
}

module.exports = promisifiedClient
Edit2:也许这是可行的(如果它不是没有承诺功能的一些奇怪的副作用,我可能不需要/不想承诺?)


它们可能是从原型对象继承的。在<代码>客户端<代码>上尝试<代码>for…in循环或原型链遍历(
Object.getPrototypeOf
),直到您看到您正在寻找的方法。将整个过程传递到Promisify如何。all Erh,Jacob,
Promisify。all
不是<代码>Promisify。all…噢,oops。我忘记了Bluebird的存在,因为Async/Wait lolHate认为redis承诺已经没有npm模块了
const redisFunctionList = Object.keys(Object.getPrototypeOf(client))

const promisifiedRedis = redisFunctionList.reduce((acc, functionName) => {
  acc[functionName] = promisify(client[functionName]).bind(client)
  return acc
}, {})

module.exports = promisifiedRedis