Heim > Web-Frontend > js-Tutorial > Wie kann Promise.all den asynchronen URL-Abruf optimieren, um die Effizienz zu steigern?

Wie kann Promise.all den asynchronen URL-Abruf optimieren, um die Effizienz zu steigern?

DDD
Freigeben: 2024-10-28 04:36:30
Original
438 Leute haben es durchsucht

How can Promise.all Streamline Asynchronous URL Fetching for Enhanced Efficiency?

Asynchroner URL-Abruf: Nutzung von Promise.all für mehr Effizienz

Das Dienstprogramm Promise.all dient als zentrales Mittel zur gleichzeitigen Ausführung einer Sequenz von asynchronen Aufgaben. Indem wir uns der Aufgabe widmen, ein Array von URLs abzurufen, wollen wir ein analoges Array erhalten, das den entsprechenden Textinhalt kapselt. Bevor wir uns mit diesem Unterfangen befassen, ist es angebracht, einen Moment über die Unzulänglichkeiten bestimmter versuchter Ansätze nachzudenken.

Der folgende Ausschnitt versucht zwar, unser Ziel zu erreichen, greift jedoch nicht weiter:

var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises)
  .then(results => {
     results.forEach(result => result.text()).then(t => texts.push(t))
  })
Nach dem Login kopieren

Erstens: Diese Implementierung ist konzeptionell fehlerhaft, da die Funktion forEach weder ein Array noch ein Versprechen zurückgibt und somit unwirksam ist. Zweitens fehlt dem Code die notwendige Verschachtelung, um die asynchrone Natur der Textextraktion angemessen zu bewältigen.

Um diese Mängel zu beheben, ist ein vielschichtiger Ansatz erforderlich. Wir beginnen mit dem Aufruf von Promise.all für das URL-Array und rufen ein Array von Versprechen ab, die die einzelnen Abrufvorgänge darstellen. Nach erfolgreichem Abschluss dieser ersten Abrufe wird ein zweiter Promise.all-Aufruf verwendet, um den Textinhalt aus den Antworttexten zu erfassen. Die gekapselten Textwerte werden dann zu einem zusammenhängenden Array zusammengefasst. Die Essenz dieses Ansatzes wird durch den folgenden Code elegant erfasst:

Promise.all(urls.map(u => fetch(u))).then(responses =>
    Promise.all(responses.map(res => res.text()))
).then(texts => {
    // Proceed with texts array...
})
Nach dem Login kopieren

Eine vereinfachte Variante dieser Strategie besteht darin, den Antworttext direkt während der ersten Erfüllung des Abrufversprechens zu extrahieren:

Promise.all(urls.map(url =>
    fetch(url).then(resp => resp.text())
)).then(texts => {
    // Proceed with texts array...
})
Nach dem Login kopieren

oder noch prägnanter mit „await:

const texts = await Promise.all(urls.map(async url => {
  const resp = await fetch(url);
  return resp.text();
}));
Nach dem Login kopieren
“.

Das obige ist der detaillierte Inhalt vonWie kann Promise.all den asynchronen URL-Abruf optimieren, um die Effizienz zu steigern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage