繁体   English   中英

forEach() 中的回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM