function fileType() { return new Promise((resolve, reject) => { let Fields = fs.readdir( path.resolve(__dirname, "access"), (err, files) => { if (err) { reject(err); return; } else { files.map((file) => { return file.split(".").slice(0, -1).join("."); }); } } ); resolve(Fields); }); } async function ambitious(data) { let fields = []; if (data.collections) { fields= await fileType(); } else { if(data.types.access){ fields.push(data.config.access); } else{ fields= await fileType(); } } return { data_name: data.name, data_access: data.config, data_encrypted: data.encrypt, data_fields: fields, }; }Aquí estoy tratando de devolver el valor del campo de la declaración if y almacenarlo en data_fields
aquí el problema es que obtengo los valores de la declaración else, pero cuando trato de devolver el valor de la declaración If, se muestra indefinido
Como quiero leer todos los archivos que están presentes dentro del acceso y eliminar la extensión del archivo y como una matriz, quiero almacenarlo en data_fields
por ejemplo, si los archivos están presentes dentro del acceso
let files=[ 'config.sql','admin.xml', 'user_manual.txt' ]para ese propósito, utilicé split and slice para eliminar toda la extensión y devolver datos en formato de matriz en data_fields
No sé cómo devolver el valor de fs.readdir y almacenarlo en data_fields
Node ya ofrece una versión Promise de la API fs . No es necesario envolver la versión de devolución de llamada en una Promesa.
import { promises } from "fs"; async function fileType () { let files = await promises.readdir(path.resolve(__dirname, "access")); return files.map( file => file.split(".").slice(0, -1).join(".")); }Prueba así
function fileType() { return new Promise((resolve, reject) => { fs.readdir( path.resolve(__dirname, "access"), (err, files) => { if (err) { reject(err); } else { resolve(files.map((file) => { // resolve here return file.split(".").slice(0, -1).join("."); })) } } ); // if you resolve you promise here, you resolve it before the readdir has been resolved itself. }); }