【发布时间】:2015-03-04 18:52:21
【问题描述】:
我正在使用 expressjs,bookshelf.js,我想发布数据数组,foreach 此类数据并保存。
我不确定问题出在哪里(快递、书架或只是普通的旧 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'});
});
我的理解是,这些调用是异步的,并且总是对最后一个数据进行操作,因为 for 语句比 save 更快。我有什么事吗?
对于这个问题有哪些最好、最简单和最正确的解决方案?
【问题讨论】:
-
这个question&answer 可能会帮助您了解您的问题。
-
在这一行:
return new Term({'id':term.id}).save(d).then(function(item_updated){});term未定义,d没有引用您希望它引用的内容。如果 request.body 是一个数组,则使用标题建议的 foreach 可以解决该问题。 -
Kevin B 感谢您的回复:这是一个错字,我将代码翻译成英文,这在其中丢失了。我现在编辑了代码。我不完全理解您答案的第二部分 - 我正在使用 for 句子。据我所知,javascript中实际上没有“foreach”。或者有吗?
标签: javascript node.js promise bluebird bookshelf.js