sql >> Database >  >> NoSQL >> Redis

Nodejs, wacht niet tot Redis-query is voltooid voordat u doorgaat met uitvoeren

U zegt dat file2/3 "dezelfde inhoud" heeft, maar ze bevinden zich niet in één kritiek gebied. Volgens de documentatie van Bluebird voor promisifyAll (zie http://bluebirdjs.com/docs/api/promise.promisifyall.html), deze functie creëert een ...Async versie van elke kernfunctie in de Redis-client. Je belt hmgetAsync in je eerste geval, maar je belt alleen hmget in je anderen.

Dit is belangrijk omdat u een async-patroon gebruikt, maar met een niet-asynchrone codestructuur. In file2/3 stel je result1 . in binnen een asynchrone callback, maar retourneer deze dan onder elke oproep voordat de oproep mogelijk was teruggekomen.

Je hebt twee keuzes:

1:Je kunt file2/3/etc converteren naar een volledig traditioneel patroon door een callback door te geven naast de redis-client:

module.exports = function(redisclient, callback){

In plaats van result1 terug te sturen , zou u dan de callback aanroepen met deze waarde:

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

2:Je zou file2/3/..N kunnen converteren om op Promise-gebaseerd te zijn, in welk geval je niet hoeft te promisifyAll(require(...)) ze - je kunt gewoon require() hen. Zo'n patroon kan er als volgt uitzien:

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

Dit is een veel eenvoudigere en schonere optie, en als je ermee doorgaat, kun je zien dat je waarschijnlijk zelfs de required() kunt elimineren en gewoon de hmgetAsync kunt doen. in file1 met de juiste gegevens teruggestuurd door Cassandra. Maar het is moeilijk te weten zonder uw specifieke toepassingsbehoeften te zien. Hoe dan ook, op Promise gebaseerde patronen zijn over het algemeen veel korter en schoner, maar niet altijd beter - er IS een matige prestatie-overhead voor het gebruik ervan. Het is jouw keuze welke kant je op gaat - beide zullen werken.




  1. stel de vervalsleutel in op een specifiek tijdstip bij gebruik van Spring-caching met Redis

  2. MongoDB best practice voor verwijzingen

  3. MongoDB $toDate

  4. mongodb hoe je maximale waarde uit collecties haalt