Would you like to clone this notebook?

When you clone a notebook you are able to make changes without affecting the original notebook.

Cancel

尝试2. 限制通道数

node v10.24.1
version: 1.0.0
endpointsharetweet
const results = []; const timeout = i => new Promise(resolve => setTimeout(() => { results.push(i); resolve(); }, i) ).then(() => { return i }); const urls = [100, 500, 300, 200] function limitRun() { let index = 0, cnt = 0; // 计数君 let idx = 2; // 通道数 function _request() { while(idx > 0 && cnt < 3) { const item = urls[index++] // 取出一个用于请求 idx-- // 占用通道 timeout(item) .finally(() => { // 注册一个回调函数,做上面提到的两件事 cnt++ // 计数+1 idx++ // 释放通道 if (cnt === 4) { // 2. 如果发现执行完毕(此处应该有一个计数,统计当前已经请求完毕),那么不再取出数据并且决议完成(或者执行完成后的回调) // do something.. console.log('执行完毕', results) } else { // 1. 如果发现待执行的队列还有需要执行的,把它放入队列(如 `1` 执行完后就应当把 `3` 放入) _request() // 递归执行 } }) } } _request() } limitRun()
Loading…

no comments

    sign in to comment