发送许多并行获取请求(超过最大浏览器支持)
Posted
技术标签:
【中文标题】发送许多并行获取请求(超过最大浏览器支持)【英文标题】:Send many parallel fetch request (more than max browser support) 【发布时间】:2020-04-23 13:51:33 【问题描述】:我想知道:如果我想发送多个 fetch 请求,超过浏览器最大并行请求支持,我可以并行发送所有请求吗 浏览器会自动处理它们吗?或者我应该先把它们缩小成足够大的束并将它们链起来。
Promise.all([allpromisses])
或任何其他解决方案,例如:
function fetchAll(urls)
const requestPromises = urls.map(url =>
return fetch(url).then(response => response.json());
);
requestPromises.reduce((chain, requestPromise) =>
return chain.then(() => requestPromise)
.then(data => data);
, Promise.resolve());
或
getBunch([promises1]).then(getBunch([promises2]). ...
【问题讨论】:
嗨哈米德,请问你是怎么解决的?我有同样的问题,我同时发送了几个提取,我必须等待超过一分钟才能收到响应,这对于 Web 应用程序来说太长了。如果我将获取次数限制为少于 6 或 7 次,那么它会立即到达 嗨。如果要在发送它们的序列上使用结果,可以使用 async 方法并在 for 循环内部使用 await,然后按序列使用结果。或者您可以通过 reduce 方法链接 fetch 的承诺。 谢谢。如果我理解正确,我正在按照您描述的第一个案例做一些事情。我已经在 SO 上发布了一个关于这个的问题,如果你不介意你可以看看我到底做了什么。我只是还没有找到一种方法来处理许多请求(超过浏览器所允许的)。响应需要很长时间才能返回 我阅读了您的问题,我认为您的问题与浏览器并行请求限制无关。 好的,非常感谢。感谢您花时间研究这个 【参考方案1】:如果您不想在所有提取返回之前继续,那么值得使用 Promise.all()
并让浏览器处理请求排队。一件好事是Promise.all()
将“快速失败”。这意味着除非您单独处理错误,否则一个失败的承诺将拒绝 Promise.all()
。
https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Promise/all#Promise.all_fail-fast_behaviour
【讨论】:
谢谢@Ed Lucas,我编辑了我的问题。我的问题更多是关于浏览器排队或在代码中处理它,正如你所说,这应该没关系。对吗? 是的。由于浏览器是限制,我会让它尽可能地将请求排队。以上是关于发送许多并行获取请求(超过最大浏览器支持)的主要内容,如果未能解决你的问题,请参考以下文章