Javascript Nodejs async.each等待第一个循环

Javascript Nodejs async.each等待第一个循环,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我试图异步处理rowsArr(比如100条记录),但我只想从数据库加载一次国家/地区列表,以避免数据库连接。我尝试下面的示例代码,但它正在打开数据库连接100次 var countryList = null; async.each(rowsArr, function(row, callback) { if( countryList == null ) { console.log("open database here to get country list

我试图异步处理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一起正常工作,但我希望它以异步方式工作。有什么建议吗

  • 从数据库中获取国家/地区
  • 处理所有行
  • 所以下面的方法会奏效

    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");
      });
    });
    

    它做它应该做的事情,所有的一百行处理同时开始,并且它们正在通过if块

    您可能需要使用锁


    这样,您可以锁定countryList检查过程以避免多个数据库连接。

    这种方法很好,但我上面的函数已经在另一个循环中了。因此,100条记录将在一个循环中处理,并且有数百万条记录。我假设在您从数据库中获取
    countries
    之前,您无法处理
    ,因此,如果我在第一次迭代中从数据库中获取
    countries
    ,其他行将不会具有
    countries from数据库
    (异步)所以我想你需要改变一点函数,这几乎可以肯定是问题的正确答案。我要么修改问题以反映为什么这个答案不起作用,要么接受它。我将根据给出的建议更改我的代码逻辑。谢谢