当前位置: 首页 > 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)
http://www.dtcms.com/a/26360.html

相关文章:

  • 叠焊和平面焊
  • 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私服
  • LeetCode刷题---哈希表---451
  • Kubernetes Pod健康检查全解析:从Liveness到滚动更新,掌握容器健康管理的核心技巧
  • DeepSeek是什么?两种模型的对比?
  • 系统设计之分布式
  • C++编程语言:抽象机制:模板和层级结构(Bjarne Stroustrup)
  • 宏块划分的原理
  • LeetCode1299
  • 自动创建spring boot应用(eclipse版本)
  • DeepSeek 入门指南
  • 【解决方法】vite-plugin-svg-icons使用中出现问题[vite] Cannot find package ‘fast-glob‘