2016-05-02 21 views
9

Ho questo codiceasincrono funzione di mappa che attendono di rendimenti Promettimi posto del valore

async function addFiles(dir,tree) { 
    return (await readDir(dir)) 
    .map(async (name) => {await readDir(dir); return name;}) 
} 

ma purtroppo, restituisce solo un mucchio di promesse, perché non c'è la funzione asincrona in mappa non è atteso su. Mi chiedo se non vi è alcun modo per attendere la funzione mappata nel codice sopra.

+3

Credo 'tornare Promise.all ((attendere readdir (dir)). mappa (...)); 'dovrebbe funzionare. Non sono sicuro che debba essere "aspetta Promise.all (...)". –

+0

Buon pensiero! Grazie! –

risposta

29

provare

async function addFiles(dir,tree) { 
    const files = await readDir(dir) 
    await Promise.all(files.map(async (name) => {await readDir(dir); return name;}) 
} 
2

Se stai usando bluebird è possibile utilizzare l'aspirapolvere, la sintassi più corta con Promise.map

async function addFiles(dir, tree) { 
    const files = await readDir(dir); 
    return Promise.map(files, async (name) => { await readDir(dir); return name; }); 
} 
+11

Come è più breve? – Stephen