解决请求数据量过大,分批多次请求的问题

相信大家偶尔会遇到某个请求数据量过大,需要分批多次请求的问题,这里举例按小时分批多次请求:

import moment from 'moment' // 引入moment时间插件
// 创建请求,请求数据
function stepRequestPro (params, index, collectArr) {
  return new Promise((resolve, reject) => {
    // requestName 自定义的请求名
    requestName(params).then(({ data: { obj } }) => {
      // 写请求成功后,需要处理的逻辑
      resolve(obj || [])
    }).catch(() => {
      resolve([])
    })
  })
}
// 比如需要请求当天0点到当前时段的数据
let startTime = moment().format('YYYY-MM-DD') + '00:00:00'
let endTime = moment().format('YYYY-MM-DD HH:mm:ss')
let promiseArr = [] // 请求的promise数组
let hourLength = 24
let requestStep = 2 // 请求数据的时间间隔,默认为分批请求2小时的数据,设置步长后请求时间会累加
let collectArr = [] // 收集每次请求的数据
for (let i = 0; i < hourLength; i++) {
  if (startTime && endTime) {
    if ((parseInt(moment(startTime).add((requestStep * (i + 1)), 'hours').format('YYYYMMDDHHmmss')) < parseInt(moment(endTime).format('YYYYMMDDHHmmss')))) {
      promiseArr.push(stepRequestPro({
        startTime: (i === 0 ? (moment(startTime).format('YYYY-MM-DD 00:00:00')) : (moment(startTime).add((requestStep * (i)), 'hours').format('YYYY-MM-DD HH:mm:ss'))),
        endTime: moment(startTime).add(requestStep * (i + 1), 'hours').format('YYYY-MM-DD HH:mm:ss')
      }, i, collectArr))
    } else {
      promiseArr.push(stepRequestPro({
        startTime: (i === 0 ? (moment(startTime).format('YYYY-MM-DD 00:00:00')) : (moment(startTime).add((requestStep * (i)), 'hours').format('YYYY-MM-DD HH:mm:ss'))),
        endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss')
      }, i, collectArr))
      break
    }
  }
}
if (promiseArr?.length > 0) {
  Promise.all(promiseArr).then(res => {
    console.log(res, '请求全部完成的数据')
  })
}

最后,原创不易,如本文对您有所帮助,麻烦点赞收藏一下谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当Java导出大量数据到Excel时,可能会因为数据量过大导致前端请求超时。这是由于以下几个原因引起的: 1. 数据量大:导出大量数据需要较长的处理时间和较高的系统资源消耗。如果数据量远远超过前端请求能承受的极限,前端请求时间可能超出设置的时间限制,从而导致超时。 2. 网络传输限制:在数据量较大的情况下,数据的传输时间也会相应增加。如果网络传输速度慢或网络连接不稳定,请求可能会在传输过程中超时。 为了解决这个问题,可以考虑以下几个方案: 1. 分批导出:将大量数据分成小批次进行导出。可以在前端过多请求来获取分批次的数据,然后在后台进行数据导出。这样可以避免单次请求时间过长导致的超时问题。 2. 后台异步导出:当前端发起数据导出请求时,后台可以先返回一个任务标识,告知前端任务已经在后台进行处理。后台将数据导出的过程放在一个异步任务中执行,不会阻塞前端请求前端可以轮询任务状态,直到任务完成并提供下载链接。 3. 压缩文件导出:将导出的数据以压缩文件的形式返回给前端,可以减小数据的传输量,加快数据传输速度。前端可以在接收到文件后再进行解压和处理。 4. 前端分页获取:前端可以通过分页的方式获取数据,每次请求只获取一页的数据。这样可以减少单次请求数据量,降低请求超时的风险。 通过上述方案,可以有效地解决Java导出Excel数据量大导致前端请求超时的问题,提高系统的可用性和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值