一个简单的Promise多线程队列实现
打算搞一个把多个 git 仓库合并成一个独立仓库的轮子,为了提高速度,需要同时拉取多个仓库。
node 提供了很方便的子进程库,在新版本中也有 promisify 接口require('util').promisify,不过好像并没有多线程队列。
然后网上找了下现成的库也不怎么好使,要么没反应要么调用有问题,于是干脆自己实现一个好了。
基本思路是搞几个 Promise 塞到一个数组里,Promise 的数量就算线程数,然后接收一个队列,从队列里 pop 出一个 promise,await 完之后继续递归。
不是很复杂,直接上代码好了:
js
Demo:
js
用了一段时间后发现还有优化空间,于是加上了错误重试和 promise 返回值处理(高亮行):
js