2011-07-03 2 views
0

Ознакомьтесь с приведенным ниже кодом и предложите более элегантные способы сделать то же самое.Лучший способ извлечения массива объектов из Redis на node.js с использованием CoffeeScript

Я храню строки JSON в базе данных Redis. Чтобы извлечь массив объектов, я использую следующий код, который работает. Только для обучения, хотя я хотел найти лучшие способы сделать то же самое. Вот код 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 

ответ

3

Я думаю, что ваш код довольно прочный. Просто будьте осторожны, что ваш

for key in result 

цикл создает понимание списка; это означает, что если result.length большой, вы увидите значительные накладные расходы и, возможно, даже проблемы с памятью. Чтобы избежать этого, необходимо добавить явные return:

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

Было предложение ввести void function syntax как раз для таких случаев, но ни один из основных коммиттеров CoffeeScript никогда, кажется, очень любит его.