Лучший шаблон для обработки асинхронного цикла в Node.js

Я новичок в Node и пытаюсь убедиться, что использую разумный дизайн для JSON- управляемое веб-приложение.

У меня есть куча данных, хранящихся в Redis, и я получаю их через узел, передавая результаты по мере их поступления из Redis. Вот хороший пример того, что я делаю:

app.get("/facility", function(req, res) {
    rc.keys("FACILITY*", function(err, replies) {
        res.write("[");
        replies.forEach(function (reply, i) {
            rc.get(reply, function(err, reply) {
                res.write(reply);
                if (i == replies.length-1) {
                    res.write("]");
                    res.end();
                }
                else
                    res.write(",");
            });
        });
    });
});

По сути, я получаю набор ключей от Redis, а затем запрашиваю каждый из них, транслируя результат в наполовину вручную созданный JSON (строки, поступающие из Redis, уже находятся в JSON). Теперь это прекрасно работает, но я не могу избавиться от мысли, что i == answers.length-1 немного неаккуратен?

Я мог бы сделать все это с помощью mget в Redis, но на самом деле я не об этом ' м пытаюсь получить это; как лучше всего обрабатывать асинхронный цикл с помощью forEach, потоковая передача вывода и изящное закрытие соединения с помощью res.end с выполнением цикла.

Это лучший способ или есть более элегантный образец, которому я мог бы следовать?

6
задан Matt S. 20 December 2011 в 17:37
поделиться