如何实现一个Request请求池,最多同时执行3个任务,超过3个任务就会进入阻塞队列,不管任务是否阻塞,都返回一个Promise对象
PS: 这是最近面试时遇到的题目,是否有比较简单的方法,能够在面试中快速手写的??
class RequestPool {
/* 返回一个Promise对象 */
request(url) {
// TODO
}
}
/* 调用方法如下 */
const pool = new RequestPool();
pool.request('1.com').then(() => {
console.log('任务1.com执行成功');
});
pool.request('2.com').then(() => {
console.log('任务2.com执行成功');
});
pool.request('3.com').then(() => {
console.log('任务3.com执行成功');
});
pool.request('4.com').then(() => {
console.log('任务4.com执行成功');
});
pool.request('5.com').then(() => {
console.log('任务5.com执行成功');
});
pool.request('6.com').then(() => {
console.log('任务6.com执行成功');
});
pool.request('7.com').then(() => {
console.log('任务7.com执行成功');
});
简单地写了一个
PromisePool
:为了验证输出,特意加了threadId。下面是其中一次测试的输出:
按这个画成图,是这个样子
再来一个 pool size 为 5 的结果示意