水线的并行写入访问

我打电话给一个REST API来更新sails中的数据库条目。 因此,我有一个函数遍历一个JSON数组,并调用每个条目另一个函数,将值保存到数据库中。

function getData(){ for(index in apiJson){ saveData(apiJSON[index]); } } 

在saveData函数中,我使用waterline的.find或者创buildfunction。 如果没有这样的条目,则创build一个新条目。 这一切工作相当好。 但是现在我想把新创build的条目(Table:match)的id追加到另一个表(Table:team)中的数组( matches )。 由于JavaScript的asynchronous行为,我得到了一些失败。

我的实现(简称)如下所示:

 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){ ... }); }); } }); 

由于JavaScriptasynchronous执行此代码,我得到了我的模型团队中的重复条目。 此外,我的数组matches模型团队不符合我的值在其他模型匹配。

我怎样才能序列化数据库写入访问,以防止这种行为? 有没有可能让循环并行运行,但数据库更新串行?

Sails.js提供asynchronous作为全局variables ,你可以使用它来做如下的序列化操作

 async.series([ function(callback) { callback(null, 'data1'); }, function(callback){ //handle data callback(null, 'data2'); } ], function(err, results) { res.send(results.data1 + results.data2); });