Nodejs async.each等待第一个循环

时间:2016-04-27 12:52:00

标签: 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 and then assign to below variable");

        countryList = countriesFromDatabase;

        callback( countryList );
    }
    else
    {
        callback( countryList );
    }


}, function(err){

      console.log("all rows are processed");

});

它与 async.eachSeries 一起工作正常,但我希望它以异步方式运行。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

  1. 从数据库中获取国家/地区
  2. 处理所有行
  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检查过程以避免多个数据库连接。