Tengo esta función con el mapa, ¿cómo puedo llamar solo cuando termine?
_.map(data,async function (el) { if(Number.parseInt(el) != NaN && (el != null) && !isNaN(el)){ console.log('ID: ' + el) await scrapeDetails(el) // <--- need to wait finish and than go to next element in map } }) async function scrapeDetails(id){ // ... bla bla }map y otras funciones de orden superior tienen comportamientos funky cuando se les dan funciones async...await . La mejor solución que encontré hasta ahora es usar la sintaxis for...of con await . Algo como esto:
for (const element of data) { // do all operations here }Recoge las promesas y resuélvelas con Promise.all(). Todos están listos cuando eso está hecho.
const promises = _.map(data, function (el) { if(Number.parseInt(el) != NaN && (el != null) && !isNaN(el)){ console.log('ID: ' + el) return scrapeDetails(el) } else { return Promise.resolve(); } }); let allResults = await Promise.all(promises); console.log('now we are done!')O siempre puedes usar la recursividad.
const asyncProcess = async (array, index) => { const value = array[index]; if (!value) return; .. await scrapeDetails(el); return asyncProcess(array, index + 1); }