【问题标题】:incapsulating redis hmset in iced coffee script function在冰咖啡脚本函数中封装 redis hmset
【发布时间】:2013-09-12 03:44:50
【问题描述】:

我想封装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 函数来传递它们呢?

【问题讨论】:

    标签: redis iced-coffeescript


    【解决方案1】:

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

    你需要做的只是在调用redis时再次喷出params

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        相关资源
        最近更新 更多