¿Cómo podría esperar el final del ciclo, obtener las rutas de las imágenes y luego inyectarlas en la consulta?
Antes de la creación de datos:
let images = []; for ( const file in files ) { fs.writeFileSync( __dirname + '/'+file+'.jpg', files[file].data ); uploads( __dirname + '/'+file+'.jpg', 'smoothies/recipes' ) .then( ( resolve ) => { images.push('https://res.cloudinary.com/###########' + resolve.public_id) ; } ) .then( () => { console.log('images uploaded here path => ', images); fs.unlinkSync( __dirname + '/'+file+'.jpg' ); console.log('file removed here '); //file removed }) .catch( ( error ) => { res.status( 500 ).send( { message:"failure tu upload the image", error, } ); } ); } Recipe.create( { name, ingredients, steps, images } ) .then( async () => { let recipes = await Recipe.find(); res.status( 201 ).json( recipes ); } ) .catch( ( error ) => { res.status( 500 ).send( { message:"failure to create the Recipe with images", error, } ); } );No puedo encontrar la solución.
Gracias.
Puede cambiar a await y usar las versiones de promesa de las funciones fs como esta:
const fsp = fs.promises; let images = []; try { for (const file in files) { const filename = __dirname + '/' + file + '.jpg'; await fsp.writeFile(filename, files[file].data); let resolve = await uploads(filename, 'smoothies/recipes'); images.push('https://res.cloudinary.com/###########' + resolve.public_id); console.log('images uploaded here path => ', images); await fsp.unlink(filename); console.log('file removed here '); } } catch (error) { res.status(500).send({ message: "failure tu upload the image", error, }); return; } try { await Recipe.create({ name, ingredients, steps, images }); let recipes = await Recipe.find(); res.status(201).json(recipes); } catch (error) { res.status(500).send({ message: "failure to create the Recipe with images", error, }); return; } Y, la función contenedora debería etiquetarse como async .