Сериализация данных Redis с узлом - PullRequest
1 голос
/ 12 января 2012

Я использую redis и node (с node_redis ), и я хотел бы сериализовать данные из redis в файл XML (используя simple-xml-writer ), но я оступилсяпри асинхронном поведении узла.

У меня есть наборы данных для a, b, c, d и e, хранящиеся в виде хэша в redis, ключи - это данные: a, data: b data: c ... икаждый ключ обращается к хешу.Теперь мой XML-файл должен выглядеть следующим образом:

<root>
  <data record="a">
     (data for a)
  </data>
  <data record="b">
     (data for b)
  </data>
  ...
</root>

Мой подход заключается в том, чтобы сделать что-то вроде:

myobjects = Array.new();
["a","b","c","d","e"].forEach(function(str) {
   database.hmget("data:" + str,function(err,obj){ myobjects.push(obj) });
});
now_serialize_myobjects();

Можно ли дождаться окончания цикла forEach и убедитесь, что все объекты в database.hmget() сохранены?Таким образом, при вызове функции now_serialize_myobjects() все объекты покрываются?

Каков наилучший подход к этой проблеме?

1 Ответ

2 голосов
/ 12 января 2012

Простейший подход

myobjects = Array.new();
var something = ["a","b","c","d","e"]; 
something.forEach(function(str) {
   database.hmget("data:" + str,function(err,obj){ 
     myobjects.push(obj);
     if(myobjects.length === something.length){
        now_serialize_myobjects();
     }
 });
});

Но почему бы не выполнить сериализацию при возврате запросов?

 startxmlfile();
 var something = ["a","b","c","d","e"]; 
 var completionCounter = 0;
 something.forEach(function(str) {
   database.hmget("data:" + str,function(err,obj){ 
     completionCounter++;
     if (!err)
        serialize(obj);
     if (completionCounter ===something.length)
        finalizexmlfile();

 });
});

если вы загружаете тонну вещей, то второй лучше, я думаю

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