0

我正在尝试使用 node.js 和 redis,并且我设法获得了一些函数来使用 Mustache 作为模板引擎来呈现单个对象。

现在我需要从列表中渲染项目,看起来像这样

list:$(id) = [node_id_1, node_id_2, node_id_3]

node:$(id) = {"value1":1, "value2":2, "value3":3, "value4":4 }

这是我处理价值观的方式

//get the list of nodes
redis.lrange('list:' + req.param.list_id, 0,-1, function(err, lastNode){

  //request the parameters i need from the single node
  var request = ['id','type'];
  redis.hmget('node:' + lastNode, request, function(err, node){
     //operations on the node
  });
});

现在我想渲染这些节点。但我不确定最好的方法是什么。我应该将所有内容保存在 js 数组中并计数以确保在读取所有节点后调用渲染函数吗?

可能这真的很微不足道,但我不确定,因为这是我第一次使用 redis 和 node

谢谢,k。

4

1 回答 1

2

This is indeed a little tricky in asynchronous land. I recommend the async module, which, among other things, can map an array to an asynchronous function:

Something like:

// [nodeIds] = [1, 2, 3]
async.map(nodeIds, getNode, function (err, nodes) {
    // render nodes
});

function getNode (node, next) {
    redis.hmget('node' + node, ['id', 'type'], next);
}

Note, though, that hmget will return an array with values, which may or may not be what you want to render in a view. If an object would be more suitable, you could try hgetall.

于 2012-11-29T21:32:03.547 回答