面对几十个异步请求,如何实现可控并发、失败处理与取消?
简答题中等1048 次浏览
参考答案与解析
核心结论:控制并发不是把请求分批后简单调用 Promise.all,而是建立一个带并发上限的任务调度器。调度器维护待执行队列和运行中计数,每当任务完成或失败,就释放槽位并启动下一个任务,从而保证任意时刻运行中的请求数不超过限制。任务应以函数形式入队,而不是提前创建 Promise;否则请求在进入调度器前已经开始,限流就失效了。
底层机制上,浏览器中的异步请求由网络模块执行,完成回调进入任务队列;Promise 的后续处理属于微任务。所谓并发限制并不是阻塞线程,而是限制何时调用任务函数。调度器必须在成功和失败两条路径上都减少运行计数,通常通过 finally 完成,否则一次异常就可能永久占用槽位。若要求保持输入顺序,
