题目

根据题意可知,要手动实现一个 TaskQueue 类 来实现 promsie 请求 的并发数量控制

function timeout(time) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, time);
    });
}

const taskQueue = new TaskQueue(); // 实现这个 TaskQueue
function addTask(time, name) {
    taskQueue.add(() => timeout(time)).then(() => {
        console.log(`任务 ${name} 完成`);
    });
}

addTask(10000, 1); // 10000 后输出:任务 1 完成
addTask(5000, 2); // 5000 后输出:任务 2 完成
addTask(3000, 3); // 8000 后输出:任务 3 完成
addTask(4000, 4); // 12000 后输出:任务 4 完成
addTask(5000, 5); // 15000 后输出:任务 5 完成

解答

class TaskQueue {
    constructor(limitCount = 2) {
        this.limitCount = limitCount; // 并发数量
        this.runingCount = 0; // 正在运行的任务数
        this.tasks = [];
    }

    add(task) {
        return new Promise((resolve, reject) => {
            this.tasks.push({ task, resolve, reject });
            this._run();
        });
    }
    
    _run() {
        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. 解答