vue js 请求队列封装代码

let sendNumber = 50  // 同时请求限制数
import requests from './requests'; // axios 普通封装函数
class RequestQueue {
  constructor() {
    this.demand = []; // 请求中队列
    this.queue = []; // 未请求队列
  }
  // 请求入口
  add(request) {
    if (this.demand.length < sendNumber) { // 请求中队列小于限制数
      this.send(request); //直接发送请求 不需要进入未请求队列
    } else {
      this.queue.push(request); //请求中队列大于限制数  未请求队列
    }
  }
  // 发送请求
  send(request) {
    this.demand.push(request);// 请求添加到请求中队列
    const i = this.queue.indexOf(request);// 从未请求队列存在删除掉
    if (i > -1) {
      this.queue.splice(i, 1);
    }
    requests(request.config)// 发送请求
      .then(response => { // 未出现异常
        request.resolve(response);//返回
      })
      .catch(error => {// 异常情况
        request.reject(error);//返回
      })
      .finally(() => {//正确错误都会走
        const index = this.demand.indexOf(request);//从请求中队列中删除掉
        if (index > -1) {
          this.demand.splice(index, 1);
        }
        if (this.queue.length > 0) {// 判断未请求队列中是否还有请求
          this.send(this.queue[0]); // 有就发送
        }
      });
  }
}

const requestQueue = new RequestQueue();// 实例化
const service = config => {
  return new Promise((resolve, reject) => {
    requestQueue.add({// 调用函数 异步等待执行
      config,
      resolve: resolve,
      reject: reject
    });
  });
};
export default service;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值