ここでの問題は、findOne
にあることです。 コールバック-beerId
常にbeerObjects
の最後のビールに設定されます 、最初のコールバックに到達する前にループが終了するため、非同期javascriptへようこそ。
これに対する1つの解決策は、findOne
をラップすることです。 IFFE(即時呼び出し関数式)のコード。このコードは、beerObjectから次のビールに移る前に完了します。
ここにIFFEに関するいくつかの詳細があります
コードをざっと見てみました。これでうまくいくと思いますが、内部コードを調整する必要があるかもしれません...
for(var i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].beerId);
//var currentBeer = beerObjects[i]; dont need this now
(function (currentBeer) {
Beer.findOne({ beerId: currentBeer},
function(err, beer) {
if(!err && !beer) {
var newBeer = new Beer();
newBeer.beerId = currentBeer.beerId;
newBeer.name = currentBeer.name;
newBeer.description = currentBeer.description;
newBeer.abv = currentBeer.abv;
newBeer.image = currentBeer.image;
newBeer.save(function(err) {
// log your error here...
});
} else if(!err) {
console.log("Beer is in the system");
} else {
console.log("ERROR: " + err);
}
}
);
})(beerObjects[i].beerId);
}