Лучший способ извлечь массив объектов из Redis на node.js, используя CoffeeScript - PullRequest
0 голосов
/ 03 июля 2011

Пожалуйста, ознакомьтесь с кодом ниже и предложите более элегантные способы сделать то же самое.

Я храню строки 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

1 Ответ

3 голосов
/ 04 июля 2011

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

for key in result
Цикл

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

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

Было предложено ввести синтаксис void функции только для таких случаев, но ни один из основных приверженцев CoffeeScript, похоже, не очень-то это любит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...