2017-08-23 7 views
0

Je récupère des données de ma base de données en utilisant redis dans une boucle comme celle-ci.node.js redis appels asynchrones

client.smembers(user_key, function(err, reply) { 
     console.log("1"); 
     for(var i=0; i < reply.length; i++) { 
     console.log("2"); 
     client.hgetall(reply[i], function(error, object) { 
      console.log("3"); 
      // Do stuff 
     }); 
     } 
     console.log("4"); 
}); 

Le problème est que Redis est asynchrone et la boucle de Foor n'attend pas Redis pour terminer la récupération des données. Ainsi, par exemple si reply est ["user_1", "user_2"] ce serait la sortie:

1 
2 
2 
4 
3 

Comment puis-je forcer la boucle à attendre Redis?

Répondre

0

Utilisez underscore :: each():

const _ = require('underscore') 
client.smembers(user_key, function(err, reply) { 
    _.each(reply,function(element, index){ 
    client.hgetall(element, function(error, object) { 
     // Do stuff 
    }) 
    }) 
})