Problem polega na tym, że w findOne
callback - Twój beerId
zawsze będzie ustawione na ostatnie piwo w beerObjects
, ponieważ pętla kończy się przed pierwszym wywołaniem zwrotnym — witamy w asynchronicznym javascript.
Jednym ze sposobów na to jest zawinięcie findOne
kod w IFFE (Immediately Invoked Function Expression). Ten kod zakończy się przed przejściem do następnego piwa z beerObject.
Oto więcej informacji na temat IFFE
Szybko przejrzałem kod, uważam, że to powinno zadziałać, ale być może będziesz musiał wprowadzić pewne poprawki w kodzie wewnętrznym...
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);
}