【发布时间】: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 上发布了一个关于这个的问题,如果你不介意你可以看看我到底做了什么。我只是还没有找到一种方法来处理许多请求(超过浏览器所允许的)。响应需要很长时间才能返回
-
我阅读了您的问题,我认为您的问题与浏览器并行请求限制无关。
-
好的,非常感谢。感谢您花时间研究这个
标签: javascript ecmascript-6 browser es6-promise fetch-api