相信大家偶尔会遇到某个请求数据量过大,需要分批多次请求的问题,这里举例按小时分批多次请求:
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, '请求全部完成的数据')
})
}
最后,原创不易,如本文对您有所帮助,麻烦点赞收藏一下谢谢!