2017-08-08 101 views
0

我试图使用节点8的方式的util.promisify整个node_redisRedisClient对象promisify类似于如何蓝鸟的promisifyAll()的作品,并没有多少运气。仿真进bluebird.promisifyAll与util.promisify

这是我迄今为止尝试:

import * as _redis from 'redis'; 
import { promisify } from 'util'; 
const client = _redis.createClient(); 
const redis = Object.keys(client).reduce((c, key) => { 
    if (typeof c[key] === 'function') c[key] = promisify(c[key]).bind(c); 
    return c; 
}, client); 

然而,这作品:

const redis = { 
    get: promisify(client.get).bind(client), 
    set: promisify(client.set).bind(client), 
    hget: promisify(client.hget).bind(client), 
    hmset: promisify(client.hmset).bind(client), 
}; 

任何想法?

编辑:我想用util.promisify,而不是像蓝鸟主要的原因是因为我做的这一切打字稿,和蓝鸟的promisifyAll似乎并没有与工作。

+0

这应该有助于http://grizzlybit.info/2017/09/29/Node-JS-8-Util-Promisify/ – zubair1024

+0

@ zubair1024它不,而你的博客文章与我的实际问题无关。 – aendrew

+0

下面是使用'util.promisify()'实现'promisifyAll()':https://www.npmjs.com/package/util-promisifyall – jfriend00

回答

0

您可以使用fluentify,它很小,没有外部依赖性,几乎可以完成您的任务。我已经亲自使用过Redis,但有一些小小的警告,但在你的情况下应该是相当直接的,例如,

import * as _redis from 'redis'; 
import fluentify from 'fluentifyjs'; 
... 
const client = fluentify(_redis.createClient()); 
const result = await client.get('key').done(); 

我得到你可能要做到这一点本身,但是,认为这将会是值得一提的作为替代,考虑如果需要的话,你会得到方法链接是免费的。

免责声明 - 我是作者

+0

它是否可以在TypeScript中工作?无论是在定义文件还是能够将函数签名传递回智能感知方面?我想使用native util.promisify的一个重要原因是它与TypeScript很好地结合在一起。 – aendrew

+0

@aendrew不幸的是,虽然它不会太难以添加支持。认为lib只需要添加定义文件,我不使用TypeScript,因此目前还没有真正做到这一点。如果您觉得自己可以随意添加支持以便随意创建公关, – James