Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

129
Views
Problema asíncrono/en espera, cuando mis URL se insertan en la base de datos, obtengo un objeto vacío

Creé una función dentro de mi ruta que cargará todas las imágenes en la biblioteca de terceros de Cloudinary y devolverá todos los enlaces de URL, y estoy presionando todos los enlaces en mi variable de URL y luego los enlaces se almacenarán en la base de datos.

Quiero hasta que los enlaces estén disponibles en mi variable de URL, no se insertará en mi base de datos. Estoy confundido acerca de cómo puedo hacerlo usando async/await o usando promesas

Esta es mi ruta con función. Estoy usando node, express, multer.

 app.post('/addProduct', async (req, res, next) => { let urls = []; async function sendImagesToCloudinary() { for (let file of req.files) { await cloudinary.uploader.upload( file.path, { public_id: `${Date.now()}`, resource_type: 'auto' } ).then(result => { //del files after upload on cloudinary fs.unlink(file.path, function (err) { if (err) { console.log(err); } }); urls.push(result.url); }) .catch(err => { console.log(err); }); } res.json(urls); } sendImagesToCloudinary(); // Publish on database const result = await unityMartMediaCollection.insertOne({ urls: urls }) res.json(result) });
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Vale la pena (a) separar las diversas operaciones asíncronas en funciones más pequeñas, más claras y comprobables, y (b) utilizar solo un estilo de sintaxis de promesa...

 // isolated version of he OP upload async function upload(file) { const params = { public_id: `${Date.now()}`, resource_type: 'auto' } return cloudinary.uploader.upload(file.path, params); } // this promisify's fs.unlink (probably natively available in fs.promise) async unlink(file) { return new Promise((resolve, reject) => { fs.unlink(file.path, error => error? reject(error) : resolve()); }); } // upload, then unlink if upload succeeds, return the url upload result // catch errors here, so other concurrent uploads can continue async uploadAndUnlink(file) { try { const url = await upload(file); await unlink(file); return url } catch (err) { console.log(err); } } // implement the route, process the files concurrently app.post('/addProduct', async (req, res, next) => { const promises = req.files.map(file => uploadAndUnlink(file)); const urls = await Promise.all(promises); const result = await unityMartMediaCollection.insertOne({ urls: urls }) res.json(result); });

Me tomé la libertad de eliminar la invocación .json en res dentro del método de producción de URL. La fuerte implicación del resto del código es que el objetivo es devolver (al cliente) el resultado de la llamada a unityMartMediaCollection .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!