首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Waterline中的并行写访问

Waterline中的并行写访问
EN

Stack Overflow用户
提问于 2015-04-03 08:13:43
回答 1查看 61关注 0票数 1

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

代码语言:javascript
复制
function getData(){
 for(index in apiJson){
   saveData(apiJSON[index]);
 }
}

在saveData函数中,我使用了来自waterline的.findOrCreate功能。如果没有这样的条目,则会创建一个新条目。这一切都运行得很好。但是现在我想将新创建的条目( table : match)中的id附加到另一个表(Table: team)中的一个数组(matches)中。由于JavaScript的异步行为,我得到了一些失败。

我的实现(简而言之)如下:

代码语言: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异步执行此代码,因此我在模型团队中获得了重复的团队条目。另外,我在模型组中的数组matches与我在另一个模型匹配中的值不对应。

我如何序列化数据库写访问来防止这种行为?是否有可能让循环并行运行,但数据库以串行方式更新?

EN

回答 1

Stack Overflow用户

发布于 2015-04-03 12:22:24

Sails.js将异步作为global variable提供,您可以使用它来执行如下序列化操作

代码语言:javascript
复制
async.series([
    function(callback) {
       callback(null, 'data1');
    },
    function(callback){
       //handle data
       callback(null, 'data2');
    }
], function(err, results) {
      res.send(results.data1 + results.data2);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29424494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档