Javascript AJAX请求池

Javascript AJAX请求池,javascript,ajax,Javascript,Ajax,我有一个对象数组,我想把它们发布到同一个URL。我希望一次发出固定数量的AJAX请求,为此我希望创建xhr对象池。如何做到这一点?您可以使用Array.prototype.splice、Promise.all、fetch一次执行N个请求 let data = [FormData, FormData, ..]; let N = 5; let pool = data.splice(0, N); let processData = requests => Promise.all(

我有一个对象数组,我想把它们发布到同一个URL。我希望一次发出固定数量的AJAX请求,为此我希望创建xhr对象池。如何做到这一点?

您可以使用Array.prototype.splice、Promise.all、fetch一次执行N个请求

let data = [FormData, FormData, ..];

let N = 5;

let pool = data.splice(0, N);

let processData = requests => 
  Promise.all(
    requests.map(fd =>
      fetch("/path/to/server", {
        method: "POST",
        body: fd
      })
      .then(response => response.ok)
    )
  )
  .then(responses => responses.every(result => result))
  .then(result => {
    if (result) {
      if (data.length) {
        pool = data.splice(0, N);
        return true
      }
    }
    return "complete"
  });    

let fn = next => next === true ? processData(pool).then(fn) : next;

processData(pool)
.then(fn)
.then(complete => console.log(complete))
.catch(err => console.log(err));
JSFIDLE


如果数组中还有任何元素,您也可以处理该数组,而无需安排再次调用函数processData

池的具体含义是什么?如果将AJAX请求封装在承诺中,可以用来解决这个问题。池的意思是XMLHttpRequest对象的数组。@simpleJ你能给出代码片段吗?我想他在任何时候都只想要n个当前的AJAX请求。如果是这样,使用循环触发初始ajax请求,然后让成功或失败处理程序调用一个函数来启动下一个请求(如果还有任何请求需要发送)。