class RequestManager {
constructor() {
// 并发请求数
this.concurrency = 1;
this.running = 0;
this.requestQueue = [];
}
async pushRequest(request) {
if (this.running >= this.concurrency) {
// resolve()未被执行之前,当前request会在这里await
await new Promise(resolve => this.requestQueue.push(resolve));
}
return this._handleRequest(request);
}
async _handleRequest(request) {
this.running++;
try {
return await request();
} catch (error) {
return Promise.reject(error)
} finally {
this.running--;
if (this.requestQueue.length > 0) {
// 执行下一个resolve
this.requestQueue[0]();
this.requestQueue.shift();
}
}
}
}
export default RequestManager