【发布时间】:2015-04-03 00:13:42
【问题描述】:
我正在调用一个 REST API 来更新我在sails 中的数据库条目。 因此,我有一个函数可以遍历 JSON 数组,并为每个条目调用另一个函数,该函数将值保存到数据库中。
function getData(){
for(index in apiJson){
saveData(apiJSON[index]);
}
}
在 saveData 函数中,我使用水线中的 .findOrCreate 功能。如果没有这样的条目,则创建一个新条目。这一切都很好。但是现在我想将新创建的条目(表:匹配)中的 id 附加到另一个表(表:团队)中的数组(matches)。由于 JavaScript 的异步行为,我遇到了一些失败。
我的实现(简而言之)如下所示:
Match.findOrCreate({..},{..}).exec(function(err,match){
...
//if match was just created in db
if(newMatch){
Team.findOrCreate({apiID: someTeamID}),
{
...
...,
matches: []
}
).exec(function(err,team){
team.matches.push(someID);
team.save(function(err,s){
...
});
});
}
});
由于 JavaScript 异步执行此代码,我在模型 Team 中获得了重复的团队条目。此外,我在模型 Team 中的数组 matches 与我在其他模型 Match 中的值不对应。
我怎样才能序列化数据库写访问以防止这种行为?是否有可能让循环并行运行但数据库串行更新?
【问题讨论】:
标签: javascript node.js sails.js waterline