bonjour, je dispose d’un tableau d’objets js construit comme suis [{link:'https://some_url',text:"..."}].
je cherche a validé les url afin de :
vérifier que je dispose bien de l’url finale et si nécessaire la mettre a jour,
supprimer du tableau les objets dont l’url finale est sans intérêt (celle dont le status code !=200, principalement)
pour ce faire j’utilise 2 petites fonctions :
async function validateURL(array) {
for (let elm of array) {
let finalURL = await terminalURL(elm.link);
if (typeof finalURL == 'string') {
elm.link = finalURL;
} else {
array = array.filter(el => el.link != elm.link)
}
}
console.log(array);
return array;
}
async function terminalURL(url) {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url: url,
responseType: 'stream'
}).then((response) => {
if (response.data.responseUrl) {
resolve(response.data.responseUrl);
}
}).catch(function(error) {
reject(error.status);
});
}).catch((err) => {
return ('some error');
});
}
ces fonction semble faire le job que j’attend, par contre je ne suis pas sur que mon code soit bien optimiser.
De plus, de la façon dont j’ai structuré mon code, le traitement des url se fait de manière séquentielle, hors je souhaiterai que ce traitement ce fasse de manière parallèles. je m’explique :
L’appel à la fonction validateURL fait appel à la fonction terminalURL à qui elle passe l’url à contrôlé en paramètre.
En retour elle attend (await) de la fonction terminalURL l'url finale et modifie les valeurs de l’objet en fonction des résultats.
Ce que je souhaiterai serait que la boucle for...of de la fonction validateURL lance mes différentes requêtes Axios en parallèle sans attendre les résultats de retour.
Et que, d’un autre coté, dés qu’une valeur est disponible, elle déclenche un évènement qui mette mon objet a jour.
de quel coté dois je cherché ?