var EventProxy = require('eventproxy');
let seconds = 0; // 计秒数
const most = 9999999;//最大并发数
function foo(start){
let ep = new EventProxy();
if(seconds != 0){//判断计秒数是否初始化
seconds = 0;
}
timer = (time) => {
return new Promise((resolve) => {
setTimeout(() => {
seconds ++;
resolve()
}, time)
})
}
ep.after('ok',most,function(){
foo(start+most);//一个批次任务完成,递归进行下一批任务
});
let q=0; // 并发数
(async function(){
for(let i=start;i<most;i++){
await timer(1000);
if(q > most){
console.log('max concurrency');
break;//最多添加most个任务
}
if (seconds > 60) {
console.log('共执行' + q + '并发数');
seconds = 0;
break; // 超过1分钟也退出
}
console.log(seconds + '秒');
q++;
}
})()
}
foo(0);
输出的结果会和seconds
一样,秒数为60,并发数也会是60,这是我代码写错了?求解。
因为这是for循环,而且还是单线程,设置了1秒执行一次。自然就是,前一个一秒执行完后,下一个一秒执行下一个.....以此类推。
现在回过头来看,真的是很低级的问题。