Aller au contenu

Metz Bove

INpactien
  • Compteur de contenus

    1
  • Inscription

  • Dernière visite

Metz Bove's Achievements

Nouveau

Nouveau (1/14)

  • First Post Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

  1. Bonjour, Si je comprends bien ton code, ta fonction "validateUrl" doit retourner le tableau d'url validés. Première remarque, le nom de la fonction n'est pas cohérent. Il prend en entrée un tableau d'URL mais le nom suggère qu'il ne peut en valider qu'une seule. Elle devrait plutôt s’appeler validateUrls (avec un s à la fin). Ensuite, le mot "validate" suggère qu'elle retourne un statut de validation. Donc un booléen. Or elle retourne la liste des URLs qui ont été validées. Donc le nom final de la fonction devrait plutôt être: getValidatedUrls, ou quelque chose dans le genre. La fonction terminalUrl a le même problème de nommage que l'autre fonction. Si je comprends bien ce qu'elle fait, elle envoie une requête http à l'url passée en paramètre et récupère une autre url qui se trouve dans le body. Donc son nom devrait plutôt être quelque chose du genre: getTerminalUrlOf(url) Ensuite pour ton problème, une solution serait de collecter l'ensemble des Promises dans un tableau et faire un Promise.all de ce tableau. Voir ici : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise/all donc en clair, le code final devrait ressemble à quelque chose qui ressemble à ça : async function getValidatedURLs(array) { // On transforme chaque élément de la liste en sa promise associée const promises = array.map(elm => { return this.getTerminalURL(elm).then(terminalUrl => { elm.link = terminalUrl; return elm; }); }); // On résout toutes les promises parallèlement. Promise.all est fait pour ça. // Si jamais getTerminalUrl rencontre une erreur, on renvoie null ce qui nous permettra de filtrer ensuite return Promise.all(promises.map(element => element.catch(_ => null))) // Quand on a obtenu tous les resultat, on retourne la liste de tous les elements retournés sans les nulls. .then(results => results.filter(element => element != null)); // Le résultat final sera donc une promise (fonction async) d'un tableau contenant les elements dont on a réussi à récupérer "l'url terminale". } async function getTerminalURL(elm) { // Axios lui même retourne une promise donc pas besoin de wrapper le tout dans une autre Promise faite maison. return axios({ method: 'get', url: elm.link, responseType: 'stream' }).then((response) => response.data.responseUrl); } En espérant avoir été assez clair. Toutes mes excuses si des erreurs se sont glissés dans ma réponse, le vendredi à 18h30, je n'ai plus parfaitement les yeux en face des trous.
×
×
  • Créer...