Problemet här är att i findOne
callback - ditt beerId
kommer alltid att vara inställd på den sista ölen i beerObjects
, eftersom slingan avslutas innan du kommer till din första återuppringning - välkommen till asynkront javascript.
En lösning för detta är att linda in din findOne
kod i en IFFE (Immediately Invoked Function Expression). Denna kod kommer att slutföras innan du går vidare till nästa öl från beerObject.
Här är lite mer information om IFFE
Jag tog en snabb passning på koden, jag tror att det här borde fungera, men du kanske måste göra några justeringar med den interna koden...
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);
}