我想填充redis hmset
。
exports.hmset = (name, autocb, params...)=>
await client.hmset name, params, defer(err)
throw err if err
我认为params
是['fooKey', 'fooValue', 'barKey', 'barValue']
之类的数组。但是我在name
密钥上的redis数据库中有数据:
{'0' : 'fooKey', '1' : 'fooValue', '2' : 'barKey', '3': 'barValue'}
但我希望它是:
{'fooKey' : 'fooValue', 'barKey' : 'barValue'}
我知道我必须将它们传递给client.hmset
而不是数组['fooKey', 'fooValue', 'barKey', 'barValue']
,但就像args:'fooKey', 'fooValue', 'barKey', 'barValue'
一样。但是当args长度不同时,如何通过包装exports.hmset
函数传递它们?
答案 0 :(得分:1)
据我了解,您正在使用调用hmset
的{{3}}约定。您使用varargs来收集数组中的参数,然后将该数组作为参数传递给node_redis - 它还支持splat约定,在该约定中传递带有键的普通对象和他们的价值观这就是为什么你用位置键获得你的redis哈希,因为如果你把一个javascript数组当作一个对象,那就是你所拥有的。
您需要做的只是在调用redis时再次展开params
:
exports.hmset = (name, autocb, params...)=>
await client.hmset name, params..., defer(err)
throw err if err
现在,coffeescript会将该数组作为varargs传递给“真正的”hmset
。作为一个额外的好处,你仍然可以使用“params as a object”惯例,这可以说更优雅。
答案 1 :(得分:0)
您是否理解{I}会在IcedCoffeeScript中无法正常工作?{1}} 它会在事件循环中引发错误,因此您无法在代码中使用“try”来捕获它。