sql >> Database teknologi >  >> NoSQL >> Redis

Det bedste mønster til håndtering af asynkron looping i Node.js

Ovenstående kode gør muligvis ikke, hvad du forventer. Du starter hver .get() i rækkefølge, men de ringer muligvis ikke tilbage i rækkefølge - så resultaterne kan strømme ud i vilkårlig rækkefølge. Hvis du vil streame resultaterne i stedet for at samle dem i hukommelsen, skal du .get() i rækkefølge.

Jeg tror, ​​at caolans async-bibliotek gør meget af dette nemmere. Her er en måde, hvorpå du kan bruge det til at få hvert element i rækkefølge (advarsel, ikke testet):

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(']');
            }
        });
    });
});

Hvis du er ligeglad med rækkefølgen, skal du bare bruge async.forEach() i stedet.

Hvis du ikke har noget imod at indsamle resultaterne og vil have dem til at returnere i rækkefølge, kan du bruge async.map() som denne (advarsel, også utestet):

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. forespørgsel i mongo Shell giver SyntaxError:missing :after property

  2. StackExchange.Redis:Batchadgang til flere hashes

  3. Sådan gemmer du en række hashes i redis

  4. 10 spørgsmål at stille (og besvare), når du hoster MongoDB på AWS