Het probleem hier is dat in de findOne
terugbellen - uw beerId
wordt altijd ingesteld op het laatste biertje in beerObjects
, omdat de lus eindigt voordat je bij je eerste callback komt - welkom bij asynchrone javascript.
Een remedie hiervoor is om uw findOne
. in te pakken code in een IFFE (Immediately Invoked Function Expression). Deze code wordt voltooid voordat u doorgaat naar het volgende bier van beerObject.
Hier is wat meer informatie over IFFE
Ik heb de code snel doorgenomen, ik denk dat dit zou moeten werken, maar het kan zijn dat je wat aanpassingen moet maken met de interne code...
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);
}