使用场景:

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

要求:

  1. 最多同时执行的任务数为 n 个;

  2. 当前任务执行完成后,释放队列空间,自动执行下一个任务;

  3. 所有任务添加到任务队列后,自动开始执行任务;

代码实现:

class TaskQueue {
    tasks: Array<{ task: Function, resolve: Function, reject: Function }>;
    limitCount: number;
    runingCount: number;

    constructor(limitCount = 2) {
        this.limitCount = limitCount; // 并发数量
        this.runingCount = 0; // 正在运行的任务数
        this.tasks = []; // 任务列表
    }
    add(task: Function) {
        // 用 new Promise 包裹,可使用 promise 相关操作
        return new Promise((resolve, reject) => {
            this.tasks.push({ task, resolve, reject });
            this._run();
        });
    }
    private _run(): void {
        while (this.runingCount < this.limitCount && this.tasks.length) {
            const { task, resolve, reject } = this.tasks.shift();
            this.runingCount++;
            task()
                .then(resolve, reject)
                .finally(() => {
                    this.runingCount--;
                    this._run();
                });
        }
    }
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 使用场景:
  2. 2. 要求:
  3. 3. 代码实现: