上传单个图片时,即uploadResults只有一个对象 - 以下工作正常。
上传多张图片时,它不会。图像对象在数据库中正确创建,但相册对象具有重复图像。例如,如果我上传image1和image2,album.Images应该只是[image1,image2],而是[image1,image2,image2]。我认为问题是foreach内部回调的时间,但不能很好地指出这个问题。
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...
});
});
});
答案 0 :(得分:1)
为什么要在每次迭代中保存相册?使用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
});
});
答案 1 :(得分:0)
我通过在最后一次迭代中运行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...
});
}
});
});