Maison >interface Web >js tutoriel >Comment récupérer efficacement des données à partir de plusieurs URL avec Promise.all ?

Comment récupérer efficacement des données à partir de plusieurs URL avec Promise.all ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 05:24:02242parcourir

How to Efficiently Fetch Data from Multiple URLs with Promise.all?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn