redis 데이터 저장소에서 키 목록을 가지고 있는데, 키 목록을 반복하고 해당 값을 redis에서 가져 오려고합니다. 캐치 내가 이렇게 .. 자바 스크립트 절차 있다면 나는 내가 할 수없는이루프 오버 이벤트 기반 코드?
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);
}
을하지만 수 Node.js를
를 통해 이벤트 중심의 언어, 자바 스크립트를 사용하고있다, 그 때문에?
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()
});
};
이 있기 때문에, 대신 한 번에 모든 요청을 실행하고 나는 연속 호출 순서를 강제하고, 콜백리스트에 삽입시키는의 잘못 솔기. 1000s의 키가 있다면 어떻게됩니까?
어떻게하면 되나요?
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