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

次に、これらのノードをレンダリングします。しかし、それを行うための最良の方法はわかりません。すべてのノードが読み取られた後にrender関数が呼び出されるように、すべてをjs配列内に保存してカウントしますか?

おそらくそれは本当に些細なことですが、redisとノードを使用するのは初めてなのでわかりません

ありがとう、k。

4

1 に答える 1

2

これは、非同期の土地では確かに少し注意が必要です。とりわけ、配列を非同期関数にマップできる非同期モジュールをお勧めします。

何かのようなもの:

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

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

ただし、hmget値を含む配列が返されることに注意してください。値は、ビューにレンダリングしたいものである場合とそうでない場合があります。オブジェクトの方が適している場合は、を試してみてくださいhgetall

于 2012-11-29T21:32:03.547 に答える