import axios from 'axios';
class RequestQueue {
constructor() {
this.queue = [];
this.isProcessing = false;
}
enqueue(request) {
this.queue.push(request);
if (!this.isProcessing) {
this.processQueue();
}
}
dequeue() {
return this.queue.shift();
}
processQueue() {
if (this.queue.length === 0) {
this.isProcessing = false;
return;
}
this.isProcessing = true;
// Sort requests by priority
this.queue.sort((a, b) => a.priority - b.priority);
const request = this.dequeue();
axios(request.config)
.then(response => {
request.resolve(response);
})
.catch(error => {
request.reject(error);
})
.finally(() => {
this.processQueue();
});
}
}
// 创建一个请求队列实例
const requestQueue = new RequestQueue();
// 封装一个带有优先级的Axios请求方法
const priorityAxios = {
get(url, config = {}, priority = 0) {
return new Promise((resolve, reject) => {
const request = {
config: { ...config, url, method: 'get' },
resolve,
reject,
priority
};
requestQueue.enqueue(request);
});
}
};
// 使用示例
priorityAxios.get('https://api.example.com/data1', {}, 1) // 优先级为1的请求
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
priorityAxios.get('https://api.example.com/data2', {}, 2) // 优先级为2的请求
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
priorityAxios.get('https://api.example.com/data3', {}, 0) // 优先级为0的请求
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
axios封装控制请求优先级
于 2024-02-23 17:31:01 首次发布