В хранилище данных redis У меня есть список ключей, я хочу перебрать этот список ключей и получить эти значения из redis. Загвоздка Я использую событие управляемого язык, JavaScript с помощью Node.jsдля циклического преобразования кода события?
Если 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);
});
};
Оба этих ответа велики, барьерный трюк сделал трюк для меня – Daniel