La función createFolder() está devolviendo una matriz vacía. No estoy seguro de lo que estoy haciendo mal, pero debe devolver los elementos dentro de project_array
function get_project_folders(){ return new Promise((resolve, reject)=>{ fs.readdir(__dirname + '/projects', (error, data1)=>{ if(error){ reject(console.log(`Error. Unable to read directory - ${error}`)) }else{ resolve(data1) } }) }) } async function createFolder(){ let list_of_projects = await get_project_folders() let project_array = [] return new Promise((resolve, reject)=>{ for(let project of list_of_projects){ let splitProject = project.split("-") fs.readdir(__dirname + `/projects/${splitProject[0]}-${splitProject[1]}`, (error, data1)=>{ if(error){ console.log('Error. Unable to read directory.') }else{ project_array.push({circuit: splitProject[0], fuse: splitProject[1], pole: data1}) } }) } resolve(project_array) }) } async function testIt(){ let folderData = await createFolder() console.log(folderData) } testIt()Este es un clásico, lo que está haciendo es resolver la promesa con la matriz vacía antes de que se hayan resuelto los métodos asincrónicos de su nodo fs. Prueba esto en su lugar:
async function createFolder(){ const list_of_projects = await get_project_folders(); const result = await Promise.all( list_of_projects.map(project => new Promise((resolve, reject) => { const splitProject = project.split("-"); fs.readdir(__dirname + `/projects/${splitProject[0]}-${splitProject[1]}`, (error, data1) => { if(error){ console.error('Error. Unable to read directory.'); resolve( null ); } else { resolve({ circuit: splitProject[0], fuse: splitProject[1], pole: data1 }); } }); }); // Filter out the errors that resolved as `null` return result.filter( Boolean ); } En esencia, envuelva cada fs. llame a una promesa, luego use Promise.all para generar una matriz de promesas. Debido a que Promise.all requiere que todo se resuelva para que se resuelva, asegúrese de resolver incluso cuando haya un error; simplemente devuelva algo falso (en mi caso, null ) para que pueda filtrarlo más tarde.