[英]Callbacks within forEach()
上传单个图像时,即,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...
});
});
});
为什么每次迭代都要保存专辑? 使用承诺(可能需要一个填充工具all
)。 使用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...
});
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.