2017-08-08 58 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