sql >> Databasteknik >  >> NoSQL >> Redis

Det bästa mönstret för att hantera asynkron looping i Node.js

Ovanstående kod kanske inte gör vad du förväntar dig. Du sätter igång varje .get() i sekvens, men de kanske inte ringer tillbaka i ordningsföljd – så resultaten kan strömma ut i vilken ordning som helst. Om du vill streama resultaten istället för att samla dem i minnet måste du .get() i följd.

Jag tror att caolans async-bibliotek gör mycket av detta enklare. Här är ett sätt du kan använda det för att få varje objekt i sekvens (varning, oprövad):

app.get("/facility", function(req, res) {
    rc.keys("FACILITY*", function(err, replies) {
        var i = 0;
        res.write("[");
        async.forEachSeries(replies, function(reply, callback){
            rc.get(reply, function(err, reply) {
                if (err){
                    callback(err);
                    return;
                }
                res.write(reply);
                if (i < replies.length) {
                    res.write(",");
                }
                i++;
                callback();
            });
        }, function(err){
            if (err) {
                // Handle an error
            } else {
                res.end(']');
            }
        });
    });
});

Om du inte bryr dig om beställningen, använd bara async.forEach() istället.

Om du inte skulle ha något emot att samla in resultaten och vill att de ska returneras i sekvens kan du använda async.map() så här (varning, även oprövat):

app.get("/facility", function(req, res) {
    rc.keys("FACILITY*", function(err, replies) {
        async.map(replies, rc.get.bind(rc), function(err, replies){
            if (err) {
                // Handle an error
            } else {
                res.end('[' + replies.join(',') + ']');
            }
        });
    });
});


  1. Django Redis Fel okänt kommando 'BZPOPMIN'

  2. Hur går man med i frågan i mongodb?

  3. MongoDB $sekund

  4. Hur kontrollerar man om ett arrayfält innehåller ett unikt värde eller en annan array i MongoDB?