这个把我给整崩溃了,
后端接口是做了限制的,防止爬虫。1s 内访问超过 3 个接口,后面的都会强制终止请求。 我前端要怎么写才能满足我上面所说的呢
1
seki 2021-06-03 10:35:04 +08:00 1
|
2
shilianmlxg OP 谢谢大佬。大佬硬邦邦
|
3
Everyman 2021-06-03 11:05:29 +08:00
// PS: 没太看懂“然后后面的重复前面的判断”这句话的具体需求是什么
function sendRequests() { const r1 = request1(); const r2 = request2(); setTimeout(async () => { const r3 = request3(); const [result1, result2, result3] = await Promise.all([r1, r2, r3]); // 处理返回结果的示例 if (result1 && result2 && result3) { const result4 = await request4(); // Do something // ... } else { // 如果请求结果不符合预期,则过段时间再试一次 setTimeout(sendRequests, 1000); } }, 500); } |
4
galikeoy 2021-06-03 11:07:04 +08:00
节流防抖
lodash.js _.throttle and _.debounce |
5
zhw2590582 2021-06-03 11:08:22 +08:00
|
6
wunonglin 2021-06-03 11:08:35 +08:00
rxjs 完美解决你的需求
|
7
Vegetable 2021-06-03 11:10:34 +08:00
我从未见过反爬虫以秒为时间粒度限流的。
你可以简单的做一个限流,不是什么前两个立即执行,后边 0.5,而是实现和后端同样的逻辑。 |
8
IvanLi127 2021-06-03 12:24:13 +08:00 via Android
我觉得你得叫后端给你把接口整合了
|
9
otakustay 2021-06-03 14:03:36 +08:00
建队列吧,每次消费队列至少间隔 0.5s ,图简单就是 0.5s 的 setInverval 去队列里找有没有东西,有就消费
|
10
shilianmlxg OP 要求的是 发送请求 想的是都每个都会得到响应数据的,所以不能终止。
我也觉得不会写,想的是只能在 axios 的请求 request.js 里面写 |
11
shilianmlxg OP @yiranHZT 谢谢大佬,但是想的是怎么写到 axios 的全局配置,就是防止请求过快,但是最好的理想状态是如果第一秒内有 4 个请求,那么第一秒里的前两个立即执行,后面的 2 个延迟一定时间执行。如果第二秒内还有 5 个请求,那么让下一秒内最多立即执行 2 个请求,剩下的延迟执行
|
12
shilianmlxg OP @wunonglin 谢谢大佬指了条明路
|
13
shilianmlxg OP @zhw2590582 谢谢大佬,大佬硬邦邦
|