То, что вы ищете, это асинхронная система управления потоком. Примером может быть Step или streamline.js .
Альтернативой может быть абстрагирование процесса, создание модели данных для Person, которая будет извлекать отдельный объект person, и модели People, представляющей собой коллекцию Person, которая будет включать в себя метод выборки нескольких людей, следующих структуре использование.
Редактировать: Я нашел полный список совместимых с узлами потоков управления / асинхронных библиотек: https://github.com/joyent/node/wiki/modules#wiki-async-flow
Редактировать: После просмотра вашего кода я подумал о другом альтернативном методе, который довольно специфичен для этого случая, но не напрямую затрагивает природу вопроса управления потоком.
Изменяя вашу схему для сохранения только идентификатора человека в ключе people
, вы открываете себя для использования команды SORT
redis, которая позволяет получать всю коллекцию в единая команда Для этого в Redis:
> SADD people 1 2 3 4
> HMSET person:1 firstname John lastname Smith
> HMSET person:2 firstname Jane lastname Smith
> HMSET person:3 firstname John lastname Doe
> HMSET person:4 firstname Jane lastname Doe
> SORT people GET # GET person:*->firstname GET person:*->lastname
1) "1"
2) "Jane"
3) "Doe"
4) "2"
5) "Jane"
6) "Smith"
7) "3"
8) "John"
9) "Doe"
10) "4"
11) "Jane"
12) "Doe"
Это дает дополнительное преимущество экономии памяти с помощью клавиши people
и позволяет разбивать на страницы / сортировать с помощью параметров by
команды *1027* и limit
.