请查看以下代码,并提出更优雅的方法。
我在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
答案 0 :(得分:3)
我认为您的代码非常可靠。请注意你的
for key in result
循环正在创建列表理解;这意味着如果result.length
很大,您将看到显着的性能开销,甚至可能出现内存问题。为避免这种情况,您需要添加一个明确的return
:
for key in result
getRecord key, (err, obj) ->
...
return
有人提议为这种情况引入void function syntax,但CoffeeScript的核心提交者似乎都不喜欢它。