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

232
Views
Devoluciones de llamada dentro de forEach()

Al cargar una sola imagen, es decir, uploadResults solo tiene un objeto: lo siguiente funciona bien.

Al cargar varias imágenes no lo hace. El objeto de imagen se crea correctamente en la base de datos, pero el objeto de álbum tiene imágenes repetidas. Por ejemplo, si subo image1 e image2, album.Images debería ser simplemente [image1, image2] pero en su lugar será [image1, image2, image2]. Creo que el problema es el momento de las devoluciones de llamada dentro de foreach, pero no puedo identificar el problema.

 uploadResults.forEach(function(uploadedItem) { var image = new Images({ imageUrl: uploadedItem.url, }); image.save(function (err, doc) { album.Images.push(doc.id); album.save(function(err, doc) { //err handling... }); }); });
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

¿Por qué estás guardando el álbum en cada iteración? Use Promise (probablemente necesite un polyfill para all ). Utilice es6-promesa :

 const Promise = require('es6-promise').Promise; let promises = []; uploadResults.forEach(uploadedItem => { let promise = new Promise((resolve, reject) => { let image = new Images({ imageUrl: uploadedItem.url, }); image.save((err, doc) => { album.Images.push(doc.id); // No saving here }); }); promises.push(promise); }); Promise .all(promises) .then(() => { album.save((error, doc) => { // rest of code }); });
over 4 years ago · Santiago Trujillo Report

0

Logré que funcionara solo ejecutando album.save() en la iteración final.

 uploadResults.forEach(function(uploadedItem, idx, array) { var image = new Images({ imageUrl: uploadedItem.url, }); image.save(function (err, doc) { album.Images.push(doc.id); if (idx === array.length - 1) { album.save(function(err, doc) { //err handling... }); } }); });
over 4 years ago · Santiago Trujillo 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!