为什么node并发数会和秒数相等?

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,这是我代码写错了?求解。

阅读 1.5k
1 个回答

因为这是for循环,而且还是单线程,设置了1秒执行一次。自然就是,前一个一秒执行完后,下一个一秒执行下一个.....以此类推。

现在回过头来看,真的是很低级的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题