Ajax队列如何实现?

比如有100个Ajax请求,因为浏览器限制不能一次性全部发出,需要进行队列,比如刚开始前4个Ajax同时发出,每完成一个请求,得到返回值后,将此Ajax弹出队列,加入下一个请求到队列中执行,请问这个用XMLHttpRequest和Fetch分别应该如何实现?

阅读 5.8k
3 个回答

不知道你说的这个队列是什么意思。
如果 Ajax 没有先后关系,像下面这样就可以了,浏览器会自行限制每个 Ajax 发送的顺序。

const URL = 'https://unpkg.com'
for (let i = 0; i < 100; i++) {
    let xhr = new XMLHttpRequest()
    xhr.open('GET', URL)
    xhr.onload = function () {
        console.log(xhr.status, xhr.response);
    }
    xhr.send(null)
}

如果要严格限制每个 Ajax 调用的顺序,可以这么实现:

const URL = 'https://unpkg.com'
function ajaxStack (stack) {
    if (stack.length <= 0) return
    let xhr = new XMLHttpRequest()
    xhr.open('GET', URL)
    xhr.onload = function () {
        stack[0]()
        stack.shift()
        ajaxStack(stack)
    }
    xhr.send(null)
}
ajaxStack([
    () => console.log(1),
    () => console.log(2),
    () => console.log(3),
    () => console.log(4),
    () => console.log(5)
])

timg?image&quality=80&size=b9999_10000&sec=1503827916780&di=82cc49e5b6f4d8bec62d8838b2cf2c2f&imgtype=0&src=http%3A%2F%2Fimages2015.cnblogs.com%2Fblog%2F282019%2F201510%2F282019-20151020203443645-1667364741.jpg

你需要的是promise async/await这些

新手上路,请多包涵

你的这个不是跟,分页,下拉加载更多的需求很像吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题