V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shilianmlxg
V2EX  ›  Vue.js

请问前端 axios 1s 内有多个请求,前两个立即执行,后面的延迟 0.5s,然后后面的重复前面的判断,请问怎么写呢

  •  
  •   shilianmlxg · 2021-06-03 10:31:23 +08:00 · 2722 次点击
    这是一个创建于 1271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个把我给整崩溃了,

    后端接口是做了限制的,防止爬虫。1s 内访问超过 3 个接口,后面的都会强制终止请求。 我前端要怎么写才能满足我上面所说的呢

    13 条回复    2021-06-03 16:00:33 +08:00
    seki
        1
    seki  
       2021-06-03 10:35:04 +08:00   ❤️ 1
    shilianmlxg
        2
    shilianmlxg  
    OP
       2021-06-03 10:45:16 +08:00
    谢谢大佬。大佬硬邦邦
    Everyman
        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);
    }
    galikeoy
        4
    galikeoy  
       2021-06-03 11:07:04 +08:00
    节流防抖
    lodash.js _.throttle and _.debounce
    zhw2590582
        5
    zhw2590582  
       2021-06-03 11:08:22 +08:00
    wunonglin
        6
    wunonglin  
       2021-06-03 11:08:35 +08:00
    rxjs 完美解决你的需求
    Vegetable
        7
    Vegetable  
       2021-06-03 11:10:34 +08:00
    我从未见过反爬虫以秒为时间粒度限流的。

    你可以简单的做一个限流,不是什么前两个立即执行,后边 0.5,而是实现和后端同样的逻辑。
    IvanLi127
        8
    IvanLi127  
       2021-06-03 12:24:13 +08:00 via Android
    我觉得你得叫后端给你把接口整合了
    otakustay
        9
    otakustay  
       2021-06-03 14:03:36 +08:00
    建队列吧,每次消费队列至少间隔 0.5s ,图简单就是 0.5s 的 setInverval 去队列里找有没有东西,有就消费
    shilianmlxg
        10
    shilianmlxg  
    OP
       2021-06-03 15:57:18 +08:00
    要求的是 发送请求 想的是都每个都会得到响应数据的,所以不能终止。
    我也觉得不会写,想的是只能在 axios 的请求 request.js 里面写
    shilianmlxg
        11
    shilianmlxg  
    OP
       2021-06-03 15:59:45 +08:00
    @yiranHZT 谢谢大佬,但是想的是怎么写到 axios 的全局配置,就是防止请求过快,但是最好的理想状态是如果第一秒内有 4 个请求,那么第一秒里的前两个立即执行,后面的 2 个延迟一定时间执行。如果第二秒内还有 5 个请求,那么让下一秒内最多立即执行 2 个请求,剩下的延迟执行
    shilianmlxg
        12
    shilianmlxg  
    OP
       2021-06-03 16:00:17 +08:00
    @wunonglin 谢谢大佬指了条明路
    shilianmlxg
        13
    shilianmlxg  
    OP
       2021-06-03 16:00:33 +08:00
    @zhw2590582 谢谢大佬,大佬硬邦邦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4891 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:01 · PVG 12:01 · LAX 20:01 · JFK 23:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.