使用CoffeeScript从node.js上的Redis中提取对象数组的更好方法

时间:2011-07-03 12:00:22

标签: node.js redis coffeescript

请查看以下代码,并提出更优雅的方法。

我在Redis数据库中存储JSON字符串。要提取对象数组,我使用以下代码。仅仅为了学习,我想找到更好的方法来做同样的事情。这是CoffeeScript代码:

redis = require "redis"
client = module.exports.client = redis.createClient()

getRecord = module.exports.getRecord = (key, fn) ->
  client.get key, (err, result) ->
    fn err, null if err
    obj = JSON.parse(result)
    fn null, obj

getDataSet = module.exports.getDataSet = (pattern, fn) ->
  client.keys pattern, (err, result) ->
    fn err, null if err
    dataSet = []
    length = result.length
    count = 0
    for key in result
      getRecord key, (err, obj) ->
        fn err, null if err
        count = count + 1
        dataSet.push obj
        fn null, dataSet if count is length

1 个答案:

答案 0 :(得分:3)

我认为您的代码非常可靠。请注意你的

for key in result

循环正在创建列表理解;这意味着如果result.length很大,您将看到显着的性能开销,甚至可能出现内存问题。为避免这种情况,您需要添加一个明确的return

for key in result
  getRecord key, (err, obj) ->
    ...
return

有人提议为这种情况引入void function syntax,但CoffeeScript的核心提交者似乎都不喜欢它。