sql >> Databasteknik >  >> NoSQL >> Redis

Hur anropar man funktionen efter att ha slutfört asynkrona funktioner inuti loopen?

Jag använder Bluebird-löften här. Notera hur avsikten med koden är ganska tydlig och att det inte finns någon kapsling.

Låt oss först lova hgetall-anropet och klienten -

var client = Promise.promisifyAll(client);

Låt oss nu skriva koden med löften, .then istället för en nodåteruppringning och aggregering med .map . Vad .then signalerar att en asynkronoperation är klar. .map tar en mängd saker och mappar dem alla till en asynkronoperation precis som ditt hgetall-anrop.

Notera hur Bluebird lägger till (som standard) en Async suffix till utlovade 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. Regex för MongoDB ObjectID

  2. Hur man får tillbaka originaldokumentet efter aggregering

  3. Mongo-fel på I control hotfix

  4. redis:säkerhetskopiera dump.rdb