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个 怎么控制呢 请问
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个 怎么控制呢 请问
算法伪代码:
var waiting = 0
function check() {
while (waiting < 100 && hasNext()) {
++waiting
doNext().onDone(function() {
--waiting
check()
})
}
}
check()
完整示例代码:
var queue = new Array(10000)
for (var i = 0; i < 10000; ++i)
queue[i] = i
function hasNext() {
return queue.length > 0
}
function doNext() {
var onDone
var i = queue.shift()
function setDone(callback) {
onDone = callback
}
setTimeout(function() {
console.log(i)
onDone()
}, 1000)
return { onDone: setDone }
}
var waiting = 0
function check() {
while (waiting < 100 && hasNext()) {
++waiting
doNext().onDone(function() {
--waiting
check()
})
}
}
check()
运行结果:每秒钟打印 100 个数字,按顺序,从 0 开始。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
TALK IS CHEAP, SHOW ME THE CODE
Promise version
async version