2016-07-01 78 views
7

Sto acquisendo contenuto da più URL. Fetch api usa le promesse dappertutto.Fare più api di recupero chiama come controllare se tutte le chiamate sono finite?

Quindi il mio codice per una richiesta simile a questo

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

Ora devo serie di URL e chiamate multiple sarà effettuato come faccio a sapere se tutte le chiamate hanno finito.

ho provato a utilizzare Promise.all ma se vedete ci sono due promesse per ogni richiesta. C'è un modo migliore, anche Promise.tutto il supporto non è altrettanto valido.

+1

'Promise.all' funzionerà benissimo qui fino a quando si concatenano le richieste. E ovunque sia supportato 'fetch', anche' Promise' lo sarà. –

+0

ok puoi darmi un esempio se hai una matrice di URL come useresti promise.all –

+3

'Promise.all (urls.map (url => fetch (url) .then (res => res.text()). then (html => (/ * stuff * /))). then (() => console.log ('tutti gli URL sono stati scaricati ed elaborati')) ' –

risposta

16

Dando per scontato che hanno una serie di URL di nome 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

È possibile anche solo fare 'Promise.all ([url1, url2]). then()' pure – clurect

+4

@clurect - Questo non è abbastanza. 'Promise.all()' accetta una serie di promesse. utile se si passa una serie di URL. – jfriend00

+0

@clurect 'urls' è una matrice di stringhe (da OP: ora ho una matrice di URL). Avvolgerlo con una Promessa non ha molto senso –