日常开发中,经常遇到打开一个页面,同时发起多个请求,而主流浏览器,对同一域名的请求会有限制的,加之,同一时间请求接口,是一种不合理的情况,故需要处理并发请求。以下为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('任务全部完成');
})