通过定时器发送ajax请求,降低并发的解决方式记录

本文记录了一种解决并发过高的方法,即使用定时器定时发送ajax请求,以确保请求按顺序进行。在处理嵌套请求时,借助Promise保证能够正确获取所有请求的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原先是for循环发送ajax请求导致并发过高的问题 ,先采用定时器的方式,定时发送ajax请求。以便降低并发。

//生成ajaxPromise对象
async function createAjaxPromise(newTempData) {

  //console.log(newTempData.length); //5
  var Index = 0;
  //下标值0-length-1
  //用来存放promise对象的数组

  var timer = null;
  let p_arr = await new Promise((resolve,reject) => {
    var p_arr1 = [];
    timer = setInterval(() => {

       console.log(Index);
      if (Index > newTempData.length - 1) {
        //超过索引,清除定时器
        // console.log(1)
        clearInterval(timer)
        // console.log(p_arr1)
         resolve(p_arr1);

      } else {
        //console.log(2)
        //  console.log(newTempData[Index++]);
        //临时索引
        var tempIndex = Index++;
        console.log(tempIndex);
        // console.log(getSomeData(newTempData[tempIndex].length, newTempData[tempIndex]));
        p_arr1.push(getSomeData(newTempData[tempIndex].length, newTempData[tempIndex]));

      }

      // console.log(newTempData.length); //5

      // console.log(getSomeData(newTempData[Index++].length, newTempData[Index++]));
    }, 1000)
    
   

  })
  return p_arr;
  // Index++;
  // console.log(Index);


  //for (let i = 0; i < newTempData.length; i++) {
  //console.log(newTempData[i])
  //console.log(i);
  //if (i > newTempData.length) return;
  //timingLoading(p_arr, newTempData, i);
  //console.log(getSomeData(newTempData[i].length, newTempData[i]));
  // p_arr.push(getSomeData(newTempData[i].length, newTempData[i]))
  //}

  //console.log(p_arr);

}

由于发送的ajax的请求是嵌套的,只能用promise来保证拿到结果集不会有问题。

//获取指定数量的结果集
async function getSomeData(totalNum, v) {
  let index = 0;
  let t_arr = [];

  return new Promise((resolve, reject) => {
    //设置定时器
    var timer = setTimeout(function (res) {
      for (i = 0; i < totalNum; i++) {
       
       
        getAddressAjax(v[i][0], v[i][1], v[i][2]).then(function (temp_arr) {

          //用坐标集合逆编码获取结构化地址
          getCoordinateAjax(temp_arr).then(function (res) {
            // console.log(res);
            // t_arr.push(res);
            t_arr.push(res);
            if (totalNum - 1 == index) {
              //console.log(1)
              //重置索引 保证ajax返回的结果有序
              resolve(t_arr);
            }
            // console.log(index)
            index++;
          })
        })
      }
    }, totalNum*30)
  })

}
//调用,获取promise对象集合
  p_arr = await createAjaxPromise(newTempData);
  console.log(p_arr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值