gpt4 book ai didi

javascript - Waterline 中的并行写入访问

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:47 24 4
gpt4 key购买 nike

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

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

在 saveData 函数中,我使用了水线中的 .findOrCreate 功能。如果没有这样的条目,则会创建一个新条目。这一切都工作得很好。但现在我想将新创建的条目(表:匹配)中的 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 异步执行此代码,我在模型团队中得到了重复的团队条目。此外,我在模型 Team 中的数组 matches 与我在其他模型 Match 中的值不对应。

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

最佳答案

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

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

关于javascript - Waterline 中的并行写入访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com