使用节点序列化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(); }); });
如果你正在加载一吨东西,第二个更好,我想