仅使用一个回调并行运行异步

Posted

技术标签:

【中文标题】仅使用一个回调并行运行异步【英文标题】:Run async in parallel with only one callback 【发布时间】:2019-03-13 01:11:22 【问题描述】:

我有一个可能很愚蠢的问题。如果我错了,请纠正我。

我正在从 REST 端点获得 1000 个结果。然而,结果被标记化并分成 100 个元素数组。处理完 100 个元素后,我需要一个回调来获取下一个 100 个。

下面是我通过数组运行的代码

  async.eachSeries(body.hits.hits, function(hit, loopHit) 
      check_order(hit, loopHit);
  , function done() 
      // get next array
  );

我在这里执行异步的原因是因为我需要知道何时完成所有 100 个结果(功能完成)。

结果是 - 我需要一个一个地运行所有 100 个元素(在 check_order 我连接到不同的 REST 点并在那里等待回调),我想同时运行所有这些元素,并且一旦最后一个是完成我想从第一个端点获取下一个数组。

有什么想法吗?

【问题讨论】:

【参考方案1】:

异步中缺少您的回调:

  async.eachSeries(body.hits.hits, function(hit, loopHit) 
      check_order(hit);
      loopHit();
  , function done() 
      // get next array
  );

你也在 checkHit 函数中给出回调 loopHit。

【讨论】:

这将导致在函数 check_order 完成之前调用回调,所以是的 - 一方面它将按照设计的方式对所有命中执行,但另一方面它不会给最后一个命中的机会完成然后触发回调;

以上是关于仅使用一个回调并行运行异步的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中使用回调异步运行linux命令

在后台运行长时间运行的并行任务,同时允许小型异步任务更新前台

如何使用 C#8 IAsyncEnumerable<T> 来异步枚举并行运行的任务

如何运行多个异步函数然后执行回调?

使用异步的并行函数调用 [重复]

如何异步运行函数以使用 Django 应用在 Heroku 上并行计算?