Node.js attendre jusqu'à ce que async fonctions sont complètes, puis continuer avec le reste du code
Dans mon code j'ai 2 pour les boucles de l'exécution d'une fonction async (c'est la même fonction, dans les deux boucles), mais le code, après ces 2 boucles, doit attendre jusqu'à ce que l'exécution d'entre eux, avant qu'il s'exécute. C'est mon code:
for(var a = 0; a < videoIds.length; a++){
if(videoIds){
findVideo(videoIds[a], function(thumbnailPath, videoName){ //findVideo is the async function
//it returns 2 values, thumbnailPath and videoName
videoNames[a] = videoName; //and then these 2 values are written in the arrays
thumbnaildPaths[a] = thumbnailPath;
console.log('1');
});
}
}
//then the above code runs one more time but with different values, so I won't include it here (it's the same thing)
enter code here
console.log('3');
//the rest of the code
//writes the values from the loops to the database so I can't run it many times
Si j'exécute le code, je vois 3 (à partir de la console.la fonction log) avant de voir des 1. Mais comme je l'ai dit ci-dessus, je dois attendre pour la boucle à la fin avant de passer. Le findVideo()
fonction contient une Vidéo.find({}) méthode prévue par la mangouste, puis renvoie les valeurs thumbnailPath et videoName. Ce dont j'ai besoin pour faire est d'attendre pour les 2 boucles à la fin, et puis continuer, mais je ne peux pas avoir le reste du code à l'intérieur de la boucle pour des raisons évidentes! Est-il possible de résoudre ce problème? Merci!!!!
- La boucle avec la fonction est là, juste pour s'assurer que certaines vidéos sélectionnées ne existent et qu'ils sont téléchargés par l'utilisateur (req.utilisateur pour être exact)
- Vous pouvez prendre un coup d'oeil à la
async
mnp modulefor la gestion asynchrone contrôle de flux - Utiliser des promesses. Ils sont là pour cela. npmjs.com/package/promise
- Utilisation
Promise.all
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utilisez des rappels, mais je préfère promesses parce qu'ils sont élégants.
Faire usage de
Promise.all()
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSolution la plus simple est d'utiliser une fonction de rappel. juste envelopper de votre boucles dans une fonction et de faire quelque chose comme cela.
Vous pourriez aussi bien utiliser Promesse de style au lieu de rappel, mais à la fois avec le travail. Pour comprendre un peu plus sur les rappels et promis, j'ai trouvé un bon article qui vous expliquera tout en détail: http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/
for
boucles d'après celui-ci, alors je dois mettre leif(callback) callback();
fonction dans le second?