JS并发队列

2023-05-26 15:05:17 浏览数 (1)

日常开发中,经常遇到打开一个页面,同时发起多个请求,而主流浏览器,对同一域名的请求会有限制的,加之,同一时间请求接口,是一种不合理的情况,故需要处理并发请求。以下为Demo:

代码语言:javascript复制
/*
* 并发执行任务
* @param { Function[] } tasks
* @param { Number } paralleCount 同时可执行的任务数
*/
function paralleTask(tasks, paralleCount = 2) {
    return new Promise((resolve, reject) => {
        if (!tasks.length) {
            resolve();
            return;
        }
        let nextTaskIndex = 0;
        let finishTaskIndex = 0; // 已完成任务数
        function _run() {
            // 运行下一个任务
            const task = tasks[nextTaskIndex];
            nextTaskIndex  ;
            task().then(() => {
                finishTaskIndex  ;
                if (nextTaskIndex < tasks.length) {
                    // 运行下一个任务
                    _run();
                } else if (finishTaskIndex === tasks.length) {
                    // 任务完成
                    resolve();
                }
            })
        }
        for (let i = 0; i < paralleCount && i < tasks.length; i  ) {
            _run();
        }
    })
}
export default paralleTask;

// 使用
const getData = () => {};
const getUserInfo = () => {};
const getList = () => {};
const tasks = [ getData, getUserInfo, getList, ];
paralleTask(tasks, 6).then(() => {
    console.log('任务全部完成');
})

0 人点赞