Il problema qui è che nel findOne
richiamata - il tuo beerId
sarà sempre impostato sull'ultima birra in beerObjects
, perché il ciclo termina prima di arrivare alla prima richiamata:benvenuto in javascript asincrono.
Un rimedio per questo è avvolgere il tuo findOne
codice in un IFFE (Immediately Invoked Function Expression). Questo codice verrà completato prima di passare alla birra successiva da beerObject.
Ecco qualche informazione in più su IFFE
Ho fatto un rapido passaggio al codice, credo che dovrebbe funzionare, ma potresti dover apportare alcune modifiche con il codice interno...
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);
}