2016-07-01 5 views
7

Ich greife Inhalte von mehreren URLs. Fetch api verwendet Versprechungen überall.Machen Sie mehrere Fetch Api-Anrufe, wie Sie überprüfen, ob alle Anrufe beendet sind?

Also mein Code für ein Anfragen wie folgt aussieht

fetch(url).then((response)=>response.text()).then(function(html) { //stuff });

jetzt i Array von URLs und mehrere Anrufe werden gemacht werden, wie kann ich wissen, wenn alle Anrufe beendet haben.

ich versuchte mit Promise.all aber wenn Sie sehen, gibt es zwei Versprechen für jede Anfrage. Gibt es einen besseren Weg, auch Promise.Alle Unterstützung ist auch nicht so gut.

+1

'Promise.all' wird gut funktionieren hier so lange, wie Sie die Anforderungen Kette. Und wo auch immer 'fetch' unterstützt wird,' Promise' wird es auch. –

+0

ok kannst du mir ein Beispiel geben, wenn du ein Array von URLs hast, wie würdest du promise.all verwenden –

+3

'Promise.all (urls.map (url => holen (url) .dann (res => res.text()). dann (html => (/ * stuff * /))). dann (() => console.log ('alle urls wurden geholt und verarbeitet')) ' –

Antwort

16

Angenommen, Sie haben eine Reihe von URLs namens urls

// separate function to make code more clear 
const grabContent = url => fetch(url) 
    .then(res => res.text()) 
    .then(html => (/* process html here */)) 

Promise 
    .all(urls.map(grabContent)) 
    .then(() => console.log(`Urls ${urls} were grabbed`)) 
+0

Du kannst tun Sie auch 'Promise.all ([url1, url2]). then()' sowie – clurect

+4

@clurect - Das ist nicht genug. 'Promise.all()' akzeptiert ein Array von Versprechen. Es wird nichts tun nützlich, wenn Sie es einfach ein Array von URLs übergeben. – jfriend00

+0

@clurect 'urls' ist ein Array von Zeichenfolgen (Von OP: jetzt habe ich Array von URLs. Einpacken mit einem Versprechen macht nicht viel Sinn. –

Verwandte Themen