Le problème ici est que dans le findOne
rappel - votre beerId
sera toujours défini sur la dernière bière dans beerObjects
, car la boucle se termine avant que vous n'arriviez à votre premier rappel - bienvenue dans le javascript asynchrone.
Un remède à cela est d'envelopper votre findOne
code dans une IFFE (Immediately Invoked Function Expression). Ce code se terminera avant de passer à la prochaine bière de beerObject.
Voici quelques infos supplémentaires sur l'IFFE
J'ai passé rapidement au code, je pense que cela devrait fonctionner, mais vous devrez peut-être faire quelques ajustements avec le code interne...
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);
}