定期发送多个AJAX邮政请求,直到其中任何一个通过

发布于 2025-02-04 11:16:14 字数 1209 浏览 2 评论 0原文

我正在为网站编写一个测试程序,大多数时候该网站给出了504个错误。 我想编写一个可以将AJAX请求发送到服务器并用服务器响应HTML替换页面的程序。 请求的过程类似于:

  1. 如果任何一个得到200个响应,则一次发送20个请求,然后取消 所有其他请求
  2. 在10秒后重复步骤1,直到任何请求得到有效响应。

目前,我正在拨打20个Ajax电话,并等待其中任何一个使用Promise.any()完成。 我面临的问题是,我如何管理一个promise.any(),因为我需要跟踪以前的批次,就像第二批次电话之一完成一样,我需要取消所有第一个批次调用并剩下第二批次,并剩下第二个电话。批次电话。 希望你明白我想要的。 这是我到目前为止所做的代码

var reqs = [];
async function post_page(url, i){

    var formElement = document.getElementById('form1');
    var data = new URLSearchParams(new FormData(formElement));
    data.append('continue', 'Continue');

    let controller = new AbortController();
    var req = fetch(url, {
        method: 'post',
        body: data,
    }
     ).then(response => {
      if (!response.ok) {
            return Promise.reject('not ok');
        }
      return (response, i);
  });
    reqs.push(controller);
};

var load_page = function(url){
    var promises = [];

    for(var i = 0 ; i < 10; i++){
        promises.push(post_page(url, i));
    };

     Promise.any(promises).then((value, index) => {
         reqs.splice(index,1);
         $.each(reqs, function(id, req){req.abort();})
        loadPageHtml(value);
    })
};

I am writing a test program for website most of time the website gives 504 error.
i want to write a program that can sent ajax requests to server and replace page with server response html.
the process of requests is like :

  1. send 20 requests at a time if any of them got 200 response then cancell
    all other requests
  2. repeat step 1 after 10 seconds until any request got valid response.

currently i am making 20 ajax calls and the wait for any of them to complete using Promise.any().
the problem i am facing is that how can i manage all batches in one Promise.any() because i need to keep track of previous batch as well like if one of second batch calls completed i need to cancell all first batch calls and remaining 2nd batch calls.
Hope you got my point what i want.
here is the code i have done so far

var reqs = [];
async function post_page(url, i){

    var formElement = document.getElementById('form1');
    var data = new URLSearchParams(new FormData(formElement));
    data.append('continue', 'Continue');

    let controller = new AbortController();
    var req = fetch(url, {
        method: 'post',
        body: data,
    }
     ).then(response => {
      if (!response.ok) {
            return Promise.reject('not ok');
        }
      return (response, i);
  });
    reqs.push(controller);
};

var load_page = function(url){
    var promises = [];

    for(var i = 0 ; i < 10; i++){
        promises.push(post_page(url, i));
    };

     Promise.any(promises).then((value, index) => {
         reqs.splice(index,1);
         $.each(reqs, function(id, req){req.abort();})
        loadPageHtml(value);
    })
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文