Me gustaría obtener ayuda porque simplemente no puedo entender cómo usar un método de espera asíncrona recursivamente en Node.js.
Estoy tratando de crear una función que devuelva todos los archivos en todas las subcarpetas como una matriz usando el módulo del sistema de archivos.
Vi muchos ejemplos en línea, pero ninguno de estos usó una matriz y luego esperé una respuesta.
¡Gracias!
function checkFiles () { const files = [] const getFiles = async dir => fs.readdir(`./${dir}`, { withFileTypes: true }, (err, inners) => { if (err) { throw new Error (err) } else { inners.forEach(inner => { inner.isDirectory() ? getFiles(`${dir}/${inner.name}`) : files.push(`file: ${inner.name}`); }); }; }); getFiles('.') if (files.length === 0) { return 'no files' } else { return files } } console.log(checkFiles())Está invocando getFiles de forma asincrónica, y dentro de getFiles pasa una devolución de llamada a readdir en lugar de await . Lo que debería intentar es agregar await a ambas líneas:
function checkFiles() { const files = [] const getFiles = async dir => { try { inners = await fs.readdir(`./${dir}`, { withFileTypes: true }) inners.forEach(inner => { inner.isDirectory() ? getFiles(`${dir}/${inner.name}`) : files.push(`file: ${inner.name}`); }); } catch { // handle error } }; await getFiles('.') if (files.length === 0) { return 'no files' } return files } Esto hará que el programa se detenga cuando llegue a getFiles() y continúe la ejecución solo después de que haya terminado, lo que significa que los files están listos para su uso.