Я использую expressjs, bookshelf.js и хочу опубликовать массив данных, для каждого из таких данных и сохранить его.
Я не совсем уверен, в чем проблема (экспресс, книжная полка или просто старый добрый javascript), но вот сценарий: когда я публикую указанный массив и пытаюсь выполнить итерацию по нему, я получаю правильное количество сохранений в базе данных, но все имеют значение последнего элемента в массиве.
Вот код:
router.post('/save/', function(req, res){
var data = req.body;
var result = [];
for (var i in data) {
var d = data[i];
if (d.user_id == -1) d.user_id = null;
new Term().where({'date_of_driving': d.day})
.fetch()
.then(function(terms){
if (terms != null) {
return new Term({'id':terms.id}).save(d).then(function(item_updated){});
} else {
return new Term().save(d).then(function(item_saved){});
}
})
.catch(function(error){
console.log(error);
});
}
res.send({'saved': 'ok'});
});
Насколько я понимаю, эти вызовы асинхронны и всегда работают с последними данными, потому что для предложения быстрее, чем для сохранения. Я на что-то?
Каковы некоторые из лучших, самых простых и правильных решений этой проблемы?
return new Term({'id':term.id}).save(d).then(function(item_updated){});
term
не определено, аd
не ссылается на то, на что вы хотите ссылаться. Использование foreach, предложенное в вашем заголовке, решит эту проблему, если request.body является массивом. - person Kevin B   schedule 04.03.2015