Vấn đề ở đây là trong findOne
gọi lại - beerId
của bạn sẽ luôn được đặt thành bia cuối cùng trong beerObjects
, bởi vì vòng lặp kết thúc trước khi bạn nhận được lệnh gọi lại đầu tiên của mình - chào mừng bạn đến với javascript không đồng bộ.
Một biện pháp khắc phục điều này là bọc findOne
của bạn mã trong IFFE (Biểu thức hàm được gọi ngay lập tức). Mã này sẽ hoàn thành trước khi chuyển sang loại bia tiếp theo từ beerObject.
Đây là một số thông tin khác về IFFE
Tôi đã xem nhanh mã, tôi tin rằng điều này sẽ hoạt động, nhưng bạn có thể phải thực hiện một số điều chỉnh với mã nội bộ ...
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);
}