JS 高并发问题(很有意思)

前沿

数据请求页面一次性并发请求200个300个,

那个可以依次并发10个

代码这样: urls 就是你的请求地址数组 , maxNum 是你的最大一次请求数量

const getManyRequest = async (urls, maxNum) => {
  if (urls.length == 0) return Promise.resove([]);
  return new Promise(function (resolve) {
    let index = 0; // 指向下一次的请url
    const result = [];
    let count = 0; // 当前完成的请求数量
    async function _request() {
      const i = index;
      const url = urls[index];
      index++;
      try {
        // const resp = await fetch(url);
        const resp = await getlnglat(url.countryCode);
        let newPusg = {
          geometry: {
            type: 'Point',
            coordinates: [resp.location.lng, resp.location.lat],
          },
          properties: {
            orderCount: url.orderCount,
            text:
              resp.admin_info.country_code + '\n' + resp.location.lng + ',' + resp.location.lat,
          },
          color: '#0ff', // #0ff #f00 #ff0
          size: 12,
          url,
        };
        result[i] = newPusg;
      } catch (err) {
        result[i] = err;
      } finally {
        count++;
        if (count === urls.length) {
          resolve(result);
        }
        if (index < urls.length) {
          _request();
        }
      }
    }

    for (let i = 0; i < Math.min(urls.length, maxNum); i++) {
      _request();
    }
  });
};

在写的时候还是用promise 去调用

getManyRequest(worldList.value, 3).then(resp => {
  console.log(resp);
  worldList.value = resp;
});

哈哈哈哈哈 还是很有趣的

posted @ 2024-03-15 12:06  -鹿-  阅读(11)  评论(0编辑  收藏  举报