2017-01-18 16 views
2

1つの画像をアップロードする場合、uploadResultsには1つのオブジェクトしかありません。forEach()内のコールバック

複数の画像をアップロードする場合は、アップロードしません。イメージオブジェクトはdb内で正しく作成されますが、アルバムオブジェクトには繰り返しイメージがあります。たとえば、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

コードが正常であるようです。コードを投稿してください。 –

+0

@ Alexandru-IonutMihai私はあまりにも多くの騒音を加えたくないし、私が投稿したものは関連するものだと思うが、間違っているかもしれない。もう少し時間が経ち、リードがない場合は、コードの詳細を投稿します。 –

+0

画像とアルバムの定義に感謝しますか? – softwarenewbie7331

答えて

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... 
      }); 
     } 
    }); 
}); 
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 
     }); 
    }); 
関連する問題