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

Nodejs, venter ikke på, at Redis-forespørgslen er fuldført, før du fortsætter med eksekveringen

Du siger, at fil2/3 er "samme indhold", men de er ikke i et kritisk område. Per Bluebirds dokumentation for promisifyAll (se http://bluebirdjs.com/docs/api/promise.promisifyall.html), denne funktion opretter en ...Async version af hver kernefunktion i Redis-klienten. Du kalder hmgetAsync i dit første tilfælde, men du ringer kun til hmget i dine andre.

Dette er vigtigt, fordi du bruger et asynkront mønster, men med en ikke-asynkron kodestruktur. I fil2/3 indstiller du result1 inde i et asynkront tilbagekald, men returner det derefter under hvert opkald, før opkaldet muligvis kunne være vendt tilbage.

Du har to valgmuligheder:

1:Du kan konvertere fil2/3/etc til et fuldt traditionelt mønster ved at sende et tilbagekald ud over redis-klienten:

module.exports = function(redisclient, callback){

I stedet for at returnere result1 , vil du så ringe tilbagekaldet med denne værdi:

if(redisValue == 'test value'){
    callback(null, "success");
} else {
    callback("failed", null);
}

2:Du kan konvertere file2/3/..N til at være Promise-baseret, i hvilket tilfælde du ikke behøver at promisifyAll(require(...)) dem - du kan simpelthen require() dem. Sådan et mønster kan se sådan ud:

module.exports = function(redisclient){
    return redisclient.hmgetAsync("testdata", "text1");
};

Dette er en meget enklere og renere mulighed, og hvis du fortsætter med det, kan du se, at du sandsynligvis endda kunne eliminere require() og blot udføre hmgetAsync i fil1 med passende data returneret af Cassandra. Men det er svært at vide uden at se dine specifikke applikationsbehov. Under alle omstændigheder er Promise-baserede mønstre generelt meget kortere og renere, men ikke altid bedre - der ER en moderat ydeevne for at bruge dem. Det er dit opkald, hvilken vej du går - begge dele vil virke.




  1. Procentdel af OR-tilstande matchede i mongodb

  2. Formater et tal som en procentdel i SQL

  3. Sådan henter du detaljerne fra mongo db og sender eller gemmer i objekt i nodejs Fork-metoden

  4. Hvordan håndterer man tidszoneproblemet, når man gemmer datoer i utc ved hjælp af mongod?