在 redis 数据存储中,我有一个键列表,我想遍历该键列表并从 redis 获取这些值。问题是我正在使用事件驱动语言,通过 node.js 的 javascript
如果 javascript 是程序性的,我可以这样做
function getAll(callback) {
var list = redis.lrange(lrange('mykey', 0, -1);
for ( var i = 0; i < list.length; i+= 1 ) {
list[i] = redis.hgetall(list[i]);
}
callback(list);
}
但是,我不能,因此..我这样做?
function getAll(callback) {
redis.lrange('mykey', 0, -1, function(err, reply) {
// convert reply into messages
var list = [];
var index = -1;
var recurse = function() {
if ( index == reply.length ) {
callback(list);
} else {
redis.hgetall(reply[i], function(err, reply) {
list.push(reply);
index += 1;
recurse();
});
}
};
recurse()
});
};
这接缝是错误的,因为我不是一次执行所有请求,然后让回调插入到列表中,而是强制执行顺序调用序列。如果有 1000 个密钥会发生什么?
我可以这样做吗?
function getAll(callback) {
redis.lrange('mykey', 0, -1, function(err, reply) {
// convert reply into messages
var list = [];
var insert = function(err, reply) {
list.push(reply);
};
for ( var i = 0; i < reply.length; i += 1 ) {
redis.hgetall(reply[i], insert);
}
??? how to block until finished ???
callback(list);
});
};