Javascript 水线并行写访问
我正在调用restapi来更新sails中的数据库条目。 因此,我有一个函数,它迭代JSON数组,并为每个条目调用另一个函数,该函数将值保存到数据库中Javascript 水线并行写访问,javascript,node.js,sails.js,waterline,Javascript,Node.js,Sails.js,Waterline,我正在调用restapi来更新sails中的数据库条目。 因此,我有一个函数,它迭代JSON数组,并为每个条目调用另一个函数,该函数将值保存到数据库中 function getData(){ for(index in apiJson){ saveData(apiJSON[index]); } } 在saveData函数中,我使用waterline中的.findOrCreate功能。如果没有这样的条目,则创建一个新条目。这一切都很好。但是现在我想将新创建的条目(Table:match)
function getData(){
for(index in apiJson){
saveData(apiJSON[index]);
}
}
在saveData函数中,我使用waterline中的.findOrCreate功能。如果没有这样的条目,则创建一个新条目。这一切都很好。但是现在我想将新创建的条目(Table:match)中的id附加到另一个表(Table:team)中的数组(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异步执行此代码,我在模型团队中获得了重复的团队条目。此外,模型团队中的我的数组匹配
与另一个模型匹配中的我的值不对应
如何序列化数据库写访问以防止这种行为?是否有可能让循环并行运行,但数据库以串行方式更新
Sails.js
将异步作为一个函数提供,您可以使用它执行如下序列化操作
async.series([
function(callback) {
callback(null, 'data1');
},
function(callback){
//handle data
callback(null, 'data2');
}
], function(err, results) {
res.send(results.data1 + results.data2);
});