项目场景:
提示:这里简述项目相关背景:
由于项目中的前端是需要按照tree组件来展示,每次加载节点都需要去发送请求,查看这个节点的状态,和这个节点的子级节点的状态,然后再根据子级节点的状态来判断是否还需要向下继续加载,直到加载到最底层的节点。
问题描述
提示:这里描述项目中遇到的问题:
我在项目中用到了递归遍历来解决这一问题,但是问题也出现了,一旦加载的节点太多的话浏览器就会报错:429 。HTTP 429 Too Many Requests
原因分析:
提示:这里填写问题的分析:
原因也很简单就是 短时间内发送了太多的请求以至于报错
解决方案:
提示:这里填写该问题的具体解决方案:
我的解决办法就是 增加了个延时函数
// 延时函数
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms))
下面是节点加载的函数
在每次请求完需要等待200ms ,完美的解决了429状态码的问题
// 节点加载时查看是否存在下级节点
const loopSearch = async(companyCode, id) => {
const p = new FormData()
p.append('companyCode', companyCode);
p.append('id', id);
const res2 = await companySearchByPid(p)
await delay(100)
if(res2.code === '0' ){
arr.push(...res2.data)
if(id.length < 9){
for(let i = 0; i<res2.data.length; i++){
await loopSearch(companyCode, res2.data[i].id)
await delay(200)
}
}
}
}
await loopSearch(companyCode, id)