水线的并行写入访问
我打电话给一个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); });
- asynchronous瀑布不正确保存与mongoose
- callback地狱,厄运金字塔,node.js
- Angular-CLI +电子找不到模块“path”
- toContain()的实际用途是什么?
- 在javascript str.replace中的特定索引之后replace一个string(from,to,indexfrom)
- 我在这个Mongoose独特的保存前validation中做错了什么?
- 如何使用Nodejs + angular JS和MySQL创builddynamic树视图
- 我在哪里可以看到Node.js中JavaScript方法的源代码,如hasOwnProperty?
- 在process._tickCallback(node.js:419:13)处,NodeJs,500未能获得访问令牌(错误:连接ECONNREFUSED)