1
我正在調用REST API來更新sails中的數據庫條目。 因此,我有一個迭代JSON數組的函數,併爲每個條目調用另一個將值保存到數據庫中的函數。Waterline中的並行寫入訪問
function getData(){
for(index in apiJson){
saveData(apiJSON[index]);
}
}
在saveData函數中,我使用waterline的.findOrCreate功能。如果沒有這樣的條目,則創建新條目。這一切都很好。但是現在我想將新創建的條目(Table:match)中的id添加到另一個表(表:團隊)中的數組(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的執行這段代碼異步我得到我的模特隊隊的重複條目。另外我的陣列matches
在模型Team中並不符合我在其他模型Match中的值。
我該如何排序數據庫寫入訪問以防止此行爲?是否有可能讓循環並行運行,但數據庫是否以串行方式更新?