0

我想封装redis hmset

exports.hmset = (name, autocb, params...)=>
    await client.hmset name, params, defer(err)
    throw err if err

我有那params是像数组一样的['fooKey', 'fooValue', 'barKey', 'barValue']。但是后来我在 redis 数据库中有数据name键:

{'0' : 'fooKey', '1' : 'fooValue', '2' : 'barKey', '3': 'barValue'}

但我希望它是:

{'fooKey' : 'fooValue', 'barKey' : 'barValue'}

我知道我必须将它们传递给client.hmset不像数组 ['fooKey', 'fooValue', 'barKey', 'barValue'],而是像 args: 一样 'fooKey', 'fooValue', 'barKey', 'barValue'exports.hmset但是当 args 长度不同时如何通过包装函数传递它们呢?

4

2 回答 2

1

据我了解,您正在使用调用的可变参数hmset约定。您使用splat收集数组中的参数,然后将数组作为参数传递给 node_redis - 它还支持对象约定,您可以在其中传递带有键及其值的普通对象。这就是为什么您使用位置键获取 redis 哈希的原因,因为如果您将 javascript 数组视为对象,那就是您所拥有的。

您需要做的只是params在调用 redis 时再次喷一下:

exports.hmset = (name, autocb, params...)=>
    await client.hmset name, params..., defer(err)
    throw err if err

现在,coffeescript 将该数组作为可变参数传递给 "real" hmset。作为一个额外的好处,您仍然可以使用“params as an object”约定,这可以说是更优雅。

于 2013-09-09T10:25:23.700 回答
0

您是否了解throw err在 IcedCoffeeScript 中不会像您期望的那样工作?它会在事件循环中引发错误,因此您无法在代码中使用“try”来捕获它。

于 2013-09-30T09:48:35.797 回答