forEach()中的callback

上传单个图像时,即uploadResults只有一个对象 – 以下工作正常。

上传多张图片时不会。 图像对象在数据库中正确创build,但相册对象具有重复图像。 例如,如果我上传了image1和image2,album.Images应该只是[image1,image2],而是[image1,image2,image2]。 我认为这个问题是callback的时机,但不能确定这个问题。

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... }); }); }); 

为什么每次迭代都要保存专辑? 使用Promise(可能需要all的polyfill)。 使用es6-promise :

 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 }); }); 

我已经通过在最后一次迭代中运行album.save()来实现它。

 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... }); } }); });