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

Hvordan kalder man funktion efter afslutning af asynkrone funktioner inde i loop?

Jeg bruger Bluebird løfter her. Bemærk, hvordan hensigten med koden er ret klar, og der ikke er nogen indlejring.

Lad os først love hgetall-kaldet og klienten -

var client = Promise.promisifyAll(client);

Lad os nu skrive koden med løfter, .then i stedet for et nodetilbagekald og aggregering med .map . Hvad .then signalerer, at en asynkronisering er fuldført. .map tager en række ting og kortlægger dem alle til en asynkronoperation ligesom dit hgetall-opkald.

Bemærk, hvordan Bluebird tilføjer (som standard) en Async suffiks til lovede metoder.

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. Hvordan ringer man til BGSAVE fra BookSleeve?

  2. Er der en konvention om navneindsamling i MongoDB?

  3. Hvordan importerer man data fra mongodb til pandaer?

  4. Hvordan fungerer Redis PubSub-abonnementsmekanismen?