2016-05-21 32 views
7

Ho il seguente codice, fileStatsPromises è di Promise<Stats>[], sia foo e bar sono Promise<Stats>[]. Qual è il modo corretto per attenderli? Voglio ottenere <Stats>[].Come posso attendere un elenco di Promises in JavaScript/TypeScript?

const files = await readDir(currentDir); 
    const fileStatsPromises = files.map(filename => path.join(currentDir, filename)).map(stat); 

    const foo = await fileStatsPromises; 
    const bar = await Promise.all(fileStatsPromises); 

MODIFICA: un esempio minimo.

function makePromise() { 
    return Promise.resolve("hello"); 
} 
const promiseArray = []; 
// const promiseArray = [] as Promise<string>[]; 
for (let i = 0; i < 10; i++) { 
    promiseArray.push(makePromise()); 
} 

(async() => { 
    const foo = await promiseArray; 
    const bar = await Promise.all(promiseArray); 
})(); 

Screenshot

+0

Il codice è piuttosto incompleta. Potresti fornire un esempio che può essere effettivamente eseguito (inclusa una definizione di 'stat')? A parte questo, se 'fileStatsPromises' è un array di Promises, dovresti stare bene con la tua seconda opzione (' bar'). – nils

+0

Sembra un errore causato dal dattiloscritto, perché la console emette effettivamente 10 "ciao" quando registro "bar". – Zen

risposta

-3

io non sono sicuro di quello che vuoi dire, ma forse bar.then(function(){ alert('complete') })

+0

Non hai provato 'async/await'? – Zen

12

questo è corretto:

const bar = await Promise.all(promiseArray); 

await Promise.all([...]) prende una serie di promesse e restituisce un array dei risultati.

bar sarà un array: ['hello', ..., 'hello']

È anche possibile decostruire la matrice risultante:

const [bar1, ..., bar10] = await Promise.all(promiseArray); 
console.log(bar1); // hello 
console.log(bar7); // hello 
+0

Non sono sicuro del motivo per cui è stato messo in onda - l'uso di "await" fa sì che questo non sia nemmeno js syntax valido ... –

+4

@Everyone_Else la domanda richiede anche TypeScript. Inoltre, questo è valido JS (ES2017) e funziona nelle versioni recenti di Node.js 7 e 8. Se è necessaria una versione precedente di JS, è possibile eseguire il codice sorgente tramite qualcosa come Babel. – Westy92

Problemi correlati