sql >> Database >  >> NoSQL >> Redis

Hoe de functie aan te roepen na voltooiing van asynchrone functies in de lus?

Ik gebruik hier Bluebird-beloftes. Merk op dat de bedoeling van de code nogal duidelijk is en dat er geen nesting is.

Laten we eerst de hgetall-oproep en de klant beloven -

var client = Promise.promisifyAll(client);

Laten we nu de code schrijven met beloften, .then in plaats van een node-callback en aggregatie met .map . Wat .then doet is een signaal dat een asynchrone bewerking is voltooid. .map neemt een reeks dingen en wijst ze allemaal toe aan een asynchrone bewerking, net als uw hgetall-oproep.

Merk op hoe Bluebird (standaard) een Async . toevoegt achtervoegsel bij beloofde methoden.

exports.awesomeThings = function(req, res) {
    // make initial request, map the array - each element to a result
    return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
       return client.hgetallAsync("awesomething:" + awesomeThing);
    }).then(function(things){ // all results ready 
         console.log(things); // log them
         res.send(JSON.stringify(things)); // send them
         return things; // so you can use from outside
    });
};


  1. Top 10 kenmerken van Big Data Hadoop

  2. Redis gebruiken als cache voor een mysql-database

  3. MongoDb's $set-equivalent in zijn Java-stuurprogramma

  4. ScaleGrid volledig beheerde hosting voor Redis™ nu beschikbaar op Azure