当前位置: 首页 > article >正文

前端面试题-异步任务队列控制

前端面试题-异步任务队列控制

感觉面试的心里素质还是不够好,当时用的是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)

http://www.kler.cn/a/555612.html

相关文章:

  • [Android]NestedScrollView嵌套RecyclerView视图点击事件冲突问题
  • 【AI】GitHub Copilot
  • AF3 _realign_pdb_template_to_query 函数解读
  • DeepSeek 冲击(含本地化部署实践)
  • ios UICollectionView使用
  • android调用ffmpeg解析rtsp协议的视频流
  • 【重磅发布】OmniParser V2-开启GUI自动化新时代
  • Spark(2)linux和简单命令
  • PDF文档管理系统V2.0
  • Mac端homebrew安装配置
  • 安全防御综合练习2 nat+智能选路
  • 问题记录汇总
  • ref() 和 reactive()响应性 浅解
  • mapbox基础,使用geojson加载Fill面图层
  • docker之图形界面portainer.io无法访问问题及解决办法
  • 挖掘图片的秘密:如何用piexif提取和修改Exif数据
  • 正则表达式–断言
  • 蓝桥杯班级活动
  • javaEE-13.spring MVC
  • k8s的资源说明 cpu 内存 requests usage limits