J'utilise pour loop pour itérer sur un tableau d'éléments et pour appeler la même fonction avec différents paramètres à l'intérieur de la boucle for. Voici mon code:Comment attendre chaque itération dans la réponse de boucle et de retour en tant que réponse API dans nodeJS
exports.listTopSongs = function(query) {
return new Promise(function(resolve, reject) {
var str = query.split(","), category,
for(var i=0; i<str.length; i++) {
sampleFn(str[i], 'sample', resolve, reject);
}
});
};
function sampleFn(lang, cat, resolve, reject) {
client.on("error", function (err) {
console.log(err);
var err = new Error('Exception in redis client connection')
reject(err);
});
client.keys(lang, function (err, keys){
if (err) return console.log(err);
if(keys.length != 0) {
client.hgetall(keys, function (error, value) {
var objects = Object.keys(value);
result['title'] = lang;
result[cat] = [];
var x =0;
for(x; x<objects.length; x++) {
var val = objects[x];
User.findAll({attributes: ['X', 'Y', 'Z'],
where: {
A: val
}
}).then(data => {
if(data != null) {
//some actions with data and stored it seperately in a Json array
if(result[cat].length == objects.length) {
resolve(result);
}
} else {
console.log(""+cat+" is not avilable for this value "+data.dataValues['X']);
}
});
}
});
});
}
Ici, il n'attendra pas la fin de la première itération. Il fonctionne juste de manière asynchrone avant de remplir la première fonction d'itération. Je dois retourner le résultat en résultat: [{1, 2}, {3,4}]. mais il fonctionne parfaitement et retourne vide ou seulement un objet avant de tout terminer. Comment le résoudre.
J'ai utilisé une boucle asynchrone de noeud. Mais il utilise ensuite et je ne peux pas envoyer mes paramètres en utilisant ce paquet. S'il vous plaît aidez-moi
Vérifiez le paquet "aync". Il a beaucoup de fonctions qui font fonctionner la boucle de façon synchrone. –
quelle version de noeud js vous utilisez? –
J'utilise le noeud 8.4.0 –