前端面试题-异步任务队列控制
前端面试题-异步任务队列控制
感觉面试的心里素质还是不够好,当时用的是promise.race思路,面完回来手撕了一下发现是自己想复杂了。
 大致题意 1000个请求,每次发送6个,当请求发送成功时,马上发起下一个任务使得当前运行任务一直保持在6个
回来手撕了一下基本可以满足题意
	const task_1 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第一个任务执行完成')
                resolve()
            }, 1000);
        })
    }
    const task_2 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第二个任务执行完成')
                resolve()
            }, 2000);
        })
    }
    const task_3 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第三个任务执行完成')
                resolve()
            }, 3000);
        })
    }
    const task_4 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第四个任务执行完成')
                resolve()
            }, 4000);
        })
    }
    const task_5 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第五个任务执行完成')
                resolve()
            }, 5000);
        })
    }
    const task_6 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('第六个任务执行完成')
                resolve()
            }, 6000);
        })
    }
    const totalTask = [task_1, task_2, task_3, task_4, task_5, task_6]
    const limit = 2
    const addTask = () => {
        if(!totalTask.length) return
        totalTask.shift()().then(doneTask => addTask())
    }
    totalTask.slice(0, limit).forEach((task,taskIndex) => {
        task().then(doneTask => addTask())
    })
    // 前limit个已经执行完成,从任务列表中去除
    totalTask.splice(0,limit)
                