Javascript 水线并行写访问

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)

我正在调用restapi来更新sails中的数据库条目。 因此,我有一个函数,它迭代JSON数组,并为每个条目调用另一个函数,该函数将值保存到数据库中

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