nodejs js 队列运行问题

var array = [1,2,3,4];function check(){if(array.length > 0)var url = array.pop();
load(url);
}}function load(url){
http.get(url, function(res){
check();
)
}}

做了个简单的队列 但现在 执行一个 再执行 一个 我想批量执行100个 再执行 100个 怎么控制呢 请问


千巷猫影
浏览 846回答 1
1回答

慕标琳琳

TALK IS CHEAP, SHOW ME THE CODEPromise versionconst&nbsp;array&nbsp;=&nbsp;[]for(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;109;&nbsp;++i)&nbsp;array.push(i)const&nbsp;once&nbsp;=&nbsp;100const&nbsp;times&nbsp;=&nbsp;Math.ceil (array.length&nbsp;/&nbsp;once)const&nbsp;load&nbsp;=&nbsp;async&nbsp;url&nbsp;=>&nbsp;({&nbsp;url&nbsp;})&nbsp;//&nbsp;replace&nbsp;here&nbsp;with&nbsp;your&nbsp;load&nbsp;http.getconst&nbsp;init&nbsp;=&nbsp;async&nbsp;()&nbsp;=>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; const&nbsp;results&nbsp;=&nbsp;[]&nbsp;&nbsp;&nbsp;&nbsp;for(let&nbsp;n&nbsp;=&nbsp;0;&nbsp;n&nbsp;<&nbsp;times;&nbsp;++n)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const&nbsp;result&nbsp;=&nbsp;await&nbsp;Promise.all(array.slice(n&nbsp;*&nbsp;once,&nbsp;(n&nbsp;+&nbsp;1)&nbsp;*&nbsp;once).map(url&nbsp;=>&nbsp;load(url))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;results.push(result) &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;results } init().then(console.log).catch(console.error)async versionvar&nbsp;async&nbsp;=&nbsp;require('async')var&nbsp;array&nbsp;=&nbsp;[];//&nbsp;prepare&nbsp;datafor(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;109;&nbsp;++i)&nbsp;{&nbsp;//&nbsp;模拟总共109个请求,可以任意更改 &nbsp;&nbsp;&nbsp;&nbsp;array.push(i) }var&nbsp;once&nbsp;=&nbsp;100;var&nbsp;times&nbsp;=&nbsp;Math.ceil(array.length&nbsp;/&nbsp;once);function&nbsp;parallelRequest(urls,&nbsp;cb)&nbsp;{//&nbsp;urls&nbsp;is&nbsp;an&nbsp;array,&nbsp;contains&nbsp;url &nbsp;&nbsp;&nbsp;&nbsp;async.parallel(urls.map(url&nbsp;=>&nbsp;load(url)),&nbsp;function(err,&nbsp;results)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(err)&nbsp;return&nbsp;cb(err) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb(null,&nbsp;results) &nbsp;&nbsp;&nbsp;&nbsp;}) }function&nbsp;load(url)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function(callback)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get(url,&nbsp;function(res)&nbsp;{&nbsp;//&nbsp;replace&nbsp;it&nbsp;using&nbsp;http.get &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//....&nbsp;focus&nbsp;on&nbsp;error&nbsp;and&nbsp;handle&nbsp;it &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(null,&nbsp;url) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;}var&nbsp;get&nbsp;=&nbsp;function(url,&nbsp;callback)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;callback(null,&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'url'&nbsp;+&nbsp;url &nbsp;&nbsp;&nbsp;&nbsp;}); };//&nbsp;request&nbsp;100&nbsp;urls&nbsp;in&nbsp;parallel&nbsp;for&nbsp;each&nbsp;requestasync.times(times,&nbsp;function(n,&nbsp;next)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;parallelRequest(array.slice(n&nbsp;*&nbsp;once,&nbsp;(n&nbsp;+&nbsp;1)&nbsp;*&nbsp;once),&nbsp;function(err,&nbsp;res)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next(err,&nbsp;res); &nbsp;&nbsp;&nbsp;&nbsp;}); },&nbsp;function(err,&nbsp;res)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;we&nbsp;should&nbsp;now&nbsp;have&nbsp;times=2&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;console.log(res) });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript