仅使用一个回调并行运行异步
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 完成之前调用回调,所以是的 - 一方面它将按照设计的方式对所有命中执行,但另一方面它不会给最后一个命中的机会完成然后触发回调;以上是关于仅使用一个回调并行运行异步的主要内容,如果未能解决你的问题,请参考以下文章
在后台运行长时间运行的并行任务,同时允许小型异步任务更新前台