【问题标题】:async.series functions are not completingasync.series 功能未完成
【发布时间】:2014-09-29 18:16:44
【问题描述】:

async.js 遇到了一个奇怪的问题。我正在解释整个场景。我在数据库中有两个表。让一个是X,有 5 行,另一个是 Y,有 2840 行。由于我的项目位于sails.js,因此我使用waterline 作为ORM。我在async.series 中运行三个函数。第一个用于从表X 中获取所有行,第二个用于从表Y 中获取所有行。在第三个函数中,我在第二个函数中获取的Y 的所有行上运行async.eachSeries,并调用外部POST api。所以整体流程是,

async.series([
    function( callback1 ){
        // Fetch all rows from `X`
    },
    function( callback1 ){
        // Fetch all rows from `Y`
    },
    function( callback1 ){
        async.eachSeries(allRowsOfY, function(item, callback2){
            // Call an external POST api.
        },
        function(err){

        });
    },
], 
function( err ){
    // Do something
});

问题是,即使Y 有 2840 行,也只进行了大约 600 个 api 调用,然后async.series 从一开始就开始运行。而这件事还在继续。为什么会这样?

【问题讨论】:

  • 您必须自己进行更多调试。要么你的计数已经关闭,要么有什么东西正在停止 eachSeries。否则,您会在 api 端点处受到某种速率限制。
  • 根据我的经验,当您多次调用其中一个callback1s 时,async 很容易失败。有没有可能发生这种情况?
  • 我从每个 async.series 函数中只调用一次 callback1
  • @taufique frome allRowsOfY 数组从何而来?

标签: node.js asynchronous sails.js waterline async.js


【解决方案1】:

当您拥有所有需要的数据时,将 async.series 移动到回调部分

async.series([
    function(callback) {
      // Fetch all rows from `X`
      callback(null, 'one');
    },
    function(callback) {
      // Fetch all rows from `Y`
      callback(null, ['two', 'three', 'four']);
    }
  ],
  function(err, allRowsOf) {
    async.eachSeries(allRowsOf[1], function(item, callback) { // take second element from array of results creates by async.series
        console.log('call external POST API with: ', item)
        callback() // call callback without error if everything is OK
      },
      function(err) {
        if (err) console.log('error', err)
      });
  });

【讨论】:

  • 我必须检查它是否有效。但是你能指出问题出在哪里吗?
  • @taufique allRowsOfY asyns.series 无法访问
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2019-10-31
  • 2013-05-20
相关资源
最近更新 更多