您当前的位置: 首页 > 

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JS任务队列、限制并发数、shift、Promise、resolve、reject、then、catch、finally、throw 、constructor、setTimeout、Math、min

发布时间:2022-05-27 22:20:00 ,浏览量:0

目录
  • 1、场景
  • 2、需求
  • 3、代码实现
1、场景

在前端页面中需要同时发送20个请求,但是服务端有限制,需要前端控制并发数,保证最多只能同时发送5个请求。

2、需求

1、最多同时执行的任务数为10个 2、当前任务执行完成后,释放队列空间,自动执行下一个任务 3、所有任务添加到任务队列后,自动开始执行任务

3、代码实现
// 请求函数 function createTask(i) { return () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(i); }, 2000); }); }; } class TaskQueue { constructor() { this.max = 5; this.taskList = []; setTimeout(() => { this.run(); }); } addTask(task) { this.taskList.push(task); } run() { let len = this.taskList.length; if (!len) return false; let min = Math.min(this.max, len); for (let i = 0; i < min; i++) { // 开始占用一个任务的空间 this.max--; let task = this.taskList.shift(); task().then((res => { console.log('result:', res); })).catch(error => { throw new Error(error); }).finally(() => { // 释放一个任务空间 this.max++; this.run(); }); } } } const taskQueue = new TaskQueue(); for (let i = 0; i < 20; i++) { const task = createTask(i + 1); taskQueue.addTask(task); } 
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

1.4017s