我正在尝试处理rowsArr(简称100条记录)异步,但我想只从数据库加载国家/地区列表一次以避免数据库连接。我正在尝试下面的示例代码,但它打开数据库连接100次。
var countryList = null;
async.each(rowsArr, function(row, callback) {
if( countryList == null )
{
console.log("open database here to get country list and then assign to below variable");
countryList = countriesFromDatabase;
callback( countryList );
}
else
{
callback( countryList );
}
}, function(err){
console.log("all rows are processed");
});
它与 async.eachSeries 一起工作正常,但我希望它以异步方式运行。有什么建议吗?
答案 0 :(得分:3)
以下是可行的
function getCountries(callback) {
console.log("open database here to get country list and then assign to below variable");
callback(null,countriesFromDatabase);
}
getCountries(function(err, countriesFromDatabase) {
// use countries in following async loop
async.each(rowsArr, function(row, callback) {
callback(null, row); //process row here
}, function(err) {
console.log("all rows are processed");
});
});
答案 1 :(得分:0)
它实际应该做的事情,所有百行处理同时开始并且他们正在传递if块。
您可能想要使用锁。 https://github.com/BorisKozo/node-async-locks
这样你可以锁定countryList检查过程以避免多个数据库连接。