node.js - 使用node序列化redis数据

标签 node.js asynchronous redis

我正在使用 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/

相关文章:

c++ - Nodejs C++ 控制台应用程序

javascript - 如何同步获取 async、await 函数结果

c# - 强制调用一次异步方法

python - Broken Pipe 错误 Redis

node.js - 安装 Node 包而不重新启动 docker compose

javascript - 基于哈希密码加密数据

javascript - Express 中的路由处理程序没有调用任何东西?

Python,非阻塞线程

java - Java中的Redis锁键

docker - 为什么 docker-compose 没有像预期的那样使用端口绑定(bind)?