实现一个简易版并发任务控制器

368 阅读1分钟
  • 废话不多说,直接看代码
const arr = []

for (let i = 0; i < 200; i++) {

    const taskObj = {
        task: () => {
            return new Promise((resolve) => {
                setTimeout(() => {
                    resolve('请求成功' + i)
                }, 2000)
            })
        },
        callback: res => {
            console.log(res);
        }
    }

    arr.push(taskObj)
}



function tasksControler(tasksArr, max) {
// 先把任务复制一份
    const copyTasks = tasksArr.slice(0)
//单个任务启动器
    const startSingleTask = () => {
// 单个任务执行完递归本身
        if (copyTasks.length === 0) return

        const { task, callback } = copyTasks.shift()
        task().then(res => {
            callback(res)
            startSingleTask()
        })
    }
//根据传入的参数,可同时开启多少个单任务执行
    for (let i = 0; i < max; i++) {
        startSingleTask()
    }
}

tasksControler(arr, 2)