Javascript 使用Node.js util模块演示所有方法
我有一个redis 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
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