如何编写一个生成函数,控制新函数Promise的并发数量?

比如编写一个createFetch(limit)函数,新函数为Promise异步请求,同时多次调用这个新函数时,有并发的限制,即同一时刻最多只能有limit个请求在执行。

如下面的这个例子,创建了一个newFetch的新函数,同时调用了多次newFetch,但最多同时只有2个在发起请求,某一个结束后,才开始下一个。

const newFetch = createFetch(2);

newFetch(url1);
newFetch(url2);
newFetch(url3);
newFetch(url4);
newFetch(url5);

请问createFetch()函数如何实现。

我个人想了一些,比如用队列存储将要发起请求的数据,Promise.race()判断当前正在进行的Promise哪个先完成了等等,但最终还是没有完全实现这个功能。

阅读 2.3k
2 个回答

好想法!

但是已经有别人封装好现成的库了,周均下载量 400w+ 的 p-queue

如果对实现感兴趣可以直接读它的源码。

有点像连接池的概念?维护一个队列和当前连接数,每个请求发起时,连接数+1,完成时-1(成功或失败),连接数=limit时,后面的请求就在队列中等待执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题