使用节点序列化redis数据

我正在使用redis和节点(与node_redis ),我想从redis序列化数据到一个XML文件(使用simple-xml-writer ),但我偶然发现节点的asynchronous行为。

我有一个数据集的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 -loop完成, 确保database.hmget()中的所有对象都存储? 所以当调用函数now_serialize_myobjects() ,所有对象都覆盖了吗?

什么是最好的方法来解决这个问题?

最简单的方法

 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(); }); }); 

如果你正在加载一吨东西,第二个更好,我想