Итак, вы перебираете n ключей и затем возвращаете JSON.stringify (объекты) после вызова client.keys (который, в свою очередь, вызовет client.hgetall для каждого ключа?), Но затем вы возвращаете response.end (JSON.stringify (objects)) после вызова client.keys.
Проблема проста - вам нужно отобразить ответ внутри функции, которая добавляет результат от hgetkeys, но только после того, как вы увидите все ответы от hgetkeys.
I 'Я не любитель кофе, но вот версия в javascript, которая должна работать:
objects= [];
client.keys('objects*', function(err, keys) {
var key, _i, _len, seen;
seen = 0;
for (_i = 0, _len = keys.length; _i < _len; _i++) {
key = keys[_i];
client.hgetall(key, function(err, obj) {
objects.push(obj);
seen++;
if (seen == len) {
return response.end(JSON.stringify(objects));
}
});
}
});
Я должен отметить, что одним из недостатков этого является то, что если вы никогда не получите ответ от одного из запросов hgetall, это будеттайм-аут, и вы никогда не отправите ответ.Может быть, лучше изменить способ хранения ваших хэшей, чтобы вы могли получить все значения одновременно или использовать функцию, которую вы вызываете через определенное время, чтобы выдать ответ, чтобы ваш клиент не ждал вечно.
Могу я спросить, почему вы решили написать это в coffeescript?Кажется, что огромная головная боль при записи узла, когда он проходит через слой перевода, подобный этому.