我正在使用 redis 和 Node (使用 node_redis ),我想将数据从 redis 序列化为 XML 文件(使用 simple-xml-writer ),但我偶然发现了 Node 的异步行为。
我将 a、b、c、d 和 e 的数据集存储为 redis 中的散列,键是数据:a,数据:b 数据: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()
时,所有的对象都覆盖了吗?
解决该问题的最佳方法是什么?
最佳答案
最简单的方法
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();
});
});
如果你要加载大量的东西,我认为第二个更好
关于node.js - 使用node序列化redis数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835218/