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

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

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

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

相关文章:

  • 叠焊和平面焊
  • Mongoose 详解
  • 小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
  • Page Assist - 本地Deepseek模型 Web UI 的安装和使用
  • Spring Cloud 服务调用 Feign
  • C++:iterator迭代器失效
  • c++播放音频
  • top命令输出内容详解
  • 【设计模式】【创建型模式】建造者模式(Builder)
  • FreeRTOS-rust 编译分析
  • 【C++】实现一个JSON解析器
  • ubuntu上如何查看coredump文件默认保存在哪个路径?
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑲】
  • Xilinx FPGA工程移植步骤---包含软核工程
  • LeetCode刷题---哈希表---215
  • Jedis 客户端 用于java连接redis服务
  • Vue3 打造 Windows 桌面个性高效组件工具
  • git clone
  • Java运算符
  • 【原创】Ubuntu 22安装nexus私服
  • 美英贸易协议|不,这不是一份重大贸易协议
  • 巴西总统卢拉昨晚抵达北京
  • 第19届威尼斯建筑双年展开幕,中国案例呈现“容·智慧”
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 上海杨浦:优秀“博主”购房最高可获200万补贴
  • 盖茨:20年内将捐出几乎全部财富,盖茨基金会2045年关闭