别再手动重试了,用 Promise 组合子实现带并发限制的请求池
在对接第三方 API 或批量拉取资源时,一个常见需求是并发控制:不能一次性发出几百个请求把浏览器连接池、服务端或者对方的网关打挂,但逐个串行又太慢。很多人会写一个简单的 for 循环加 await,但这样并发度永远是 1。也有人用 Promise.all 一次性全推出去,结果触发 429 或者连接超时。真正健壮的做法是实现一个请求池:维持固定数量的活跃请求,完成一个立刻补上一个,同时保留每个任务的结果和错误。这篇文章会从 Promise 的状态机行为讲起,先给出一个 30 行左右的池化实现,然后讨论错误处理、返回值顺序、以及如何用 AbortController 在页面跳转时取消所有待处理任务...