Проблемът тук е, че в findOne
обратно повикване - вашият beerId
винаги ще бъде настроена на последната бира в beerObjects
, защото цикълът завършва преди да стигнете до първото си обратно извикване - добре дошли в асинхронния javascript.
Едно средство за това е да опаковате вашия 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);
}