utilise les Promise sur ta premiere methode comme ca l'ors de sont appel tu peut utiliser le .then() pour passer la 2eme methode en callback et du coup elle se fera apres la fin de la premiere methode. les Promises rendent le code synchrone en gros.
Bonjour,
J'ai deux méthodes, une qui retourne l'arborescence d'un dossier _getDirectoryTree et une autre qui retourne les informations d'un fichier _getFile. Cette dernière fait un appel à une base de donnée avec Sequelize. Voici la première méthode :
Et voici la seconde :
Séparément, les deux méthodes fonctionnent très bien. Mais ensemble, c'est la cata dû au côté asynchrone de Node JS. En effet, j'ai ajouté deux console.log() dans les méthodes que vous voyez au dessus. Et il se trouve que je vois d'abord ha et ensuite got alors que je devrais voir got puis ha. Voici le résultat que je souhaiterai obtienir :
Le fichier du dossier est bien présent. Or moi j'obtient :
J'ai null à la place de mon fichier parce que Node n'a pas attendu le résultat de _getFile. Il a retourné l'objet sans. Le truc c'est que je vois mal comment contourner ce problème à l'intérieur d'une fonction map. Est-ce que quelqu'un pourrait m'aider ? Car j'ai une autre méthode _getDirectory (qui me donne des informations relatives au dossier) qui ne fait pas d'appel à la base de donnée du coup je n'ai pas ce soucis d'attendre non ?
Merci et bonne journée ! :)
2 réponses
Comme conseillé, j'ai utilisé les Promise sur mes méthodes. J'obtiens toujours le même soucis sur cette la méthode _getDirectoryTree(bon ça a résolu pas mal de mes autres problèmes, donc excellent conseil !). Je pense que le soucis vient du fait que j'utilise des Promise embriquées dans une fonction map. Il faudrait que j'utilise Promise.all() à mon avis mais j'ai pas réussi à le faire. Voici ce que j'ai pour le moment :
Dans ma méthode _getDirectory et _getFile, j'ai placé les commandes suivantes console.log('Directory ready') et console.log('File ready'). Quand je fais ma requête, j'obtient :
Je vous ai fait un gist avec toute ma classe ici : gist
Merci pour votre aide ! :)