Conquérir plusieurs récupérations d'URL avec Promise.all
Dans le domaine de la programmation asynchrone, Promises offre un mécanisme puissant pour gérer des tâches asynchrones telles que la récupération données provenant de plusieurs URL. Comme vous l'avez constaté, essayer d'adapter ce cas d'utilisation au paradigme Promise.all peut être une pierre d'achoppement.
Disséquons votre tentative de solution :
var promises = urls.map(url => fetch(url)); var texts = []; Promise.all(promises) .then(results => { results.forEach(result => result.text()).then(t => texts.push(t)) })
Cette méthode souffre d'un défaut crucial : forEach ne renvoie ni un tableau ni une promesse, vous laissant dans une promesse vide sans aucun moyen d'accéder aux textes récupérés.
Pour remédier à cela, Promise.all doit être employé deux fois, une fois pour récupérer le URL et une fois pour extraire le texte des réponses :
Promise.all(urls.map(u=>fetch(u))).then(responses => Promise.all(responses.map(res => res.text())) ).then(texts => { … })
Vous pouvez également rationaliser le processus en combinant la récupération et la récupération de texte en une seule étape :
Promise.all(urls.map(url => fetch(url).then(resp => resp.text()) )).then(texts => { … })
Pour plus solution concise, profitez de la puissance de async/await :
const texts = await Promise.all(urls.map(async url => { const resp = await fetch(url); return resp.text(); }));
Ces approches vous offrent la possibilité de gérer efficacement plusieurs récupérations d'URL, vous permettant de créer l'objet souhaité contenant les textes extraits.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!