Javascript AJAX请求池
我有一个对象数组,我想把它们发布到同一个URL。我希望一次发出固定数量的AJAX请求,为此我希望创建xhr对象池。如何做到这一点?您可以使用Array.prototype.splice、Promise.all、fetch一次执行N个请求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(
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请求,然后让成功或失败处理程序调用一个函数来启动下一个请求(如果还有任何请求需要发送)。