Wie kann ich ein Array von URLs mit Promise.all abrufen?
Wenn ich ein array von urls:
var urls = ['1.txt', '2.txt', '3.txt']; //these text files contain "one", "two", "three", respectively.
Und ich bauen möchte, ein Objekt, das aussieht wie dieses:
var text = ['one', 'two', 'three'];
Ich habe versucht zu lernen, dies zu tun mit fetch
die natürlich zurück Promise
s.
Einige Dinge, die ich versucht habe, das nicht Arbeit:
var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises)
.then(results => {
results.forEach(result => result.text()).then(t => texts.push(t))
})
Diese nicht richtig Aussehen, und in jedem Fall funktioniert es nicht — ich am Ende nicht mit einem array ['eins', 'zwei', 'drei'].
Ist mit Promise.all
den richtigen Ansatz hier?
InformationsquelleAutor der Frage | 2015-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja,
Promise.all
ist der richtige Ansatz, aber Sie wirklich brauchen, es sich zweimal, ob Sie möchten, um erstefetch
alle urls und dann bekommen alletext
s von Ihnen (die wiederum verspricht für den Text der Antwort). So müssten Sie tun,Deinen aktuellen code nicht funktioniert, da
forEach
gibt nichts (weder ein array noch ein Versprechen).Natürlich können Sie vereinfachen, und starten Sie mit immer den Körper aus jeder Antwort direkt nach der jeweiligen fetch Versprechen erfüllt:
InformationsquelleAutor der Antwort Bergi
Für einige Grund keiner von Bergi - Beispiele, die für mich gearbeitet. Es würde geben mir einfach leere Ergebnisse. Nach einigem Debuggen es seemes wie das Versprechen würde zurück, bevor der fetch beendet hatte, daher die leeren Ergebnisse.
Benjamin Gruenbaum hatte hier eine Antwort weiter oben, aber es gelöscht. Seine Methode hat für mich arbeiten, also werde ich einfach copy-paste es hier als alternative für den Fall, jemand anderes läuft in irgendwelche Probleme mit der ersten Lösung hier.
InformationsquelleAutor der Antwort peirix
Sollten Sie verwenden
map
stattforEach
:InformationsquelleAutor der Antwort evgenAborigen