首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GetStaticProps上的许多请求冻结了我的应用程序构建,并返回一个服务器错误

在GetStaticProps上的许多请求冻结了我的应用程序构建,并返回一个服务器错误
EN

Stack Overflow用户
提问于 2021-06-22 02:09:58
回答 4查看 99关注 0票数 2

我正在尝试列出一堆产品,我想请求节点上的数据,并以静态的方式构建页面,这样主页就会更快。

问题是,当我在GetStaticProps上发出超过80个请求时。

下面的代码包含80个项目,可以正常工作

代码语言:javascript
运行
复制
const urlList = [];

for (let i = 1; i <= 80; i++) {
  const url = `myApiUrl`;
  urlList.push(url);
}

const promises = urlList.map(url => axios.get(url));
const responses = await Promise.all(promises);

return responses;

以下包含880个条目的代码无法工作(请注意,它确实可以在GetStaticProps之外工作)

代码语言:javascript
运行
复制
const urlList = [];

for (let i = 1; i <= 880; i++) {
  const url = `myApiUrl`;
  urlList.push(url);
}

const promises = urlList.map(url => axios.get(url));
const responses = await Promise.all(promises);

return responses;

控制台上的错误:

代码语言:javascript
运行
复制
Uncaught     at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20)

网页错误:

代码语言:javascript
运行
复制
Server Error
Error

This error happened while generating the page. Any console logs will be displayed in the terminal window.

TLSWrap.onStreamRead
internal/stream_base_commons.js (209:20)

有没有办法处理这么大的请求量?我是hhtp请求的新手,有什么方法可以优化它吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-06-30 16:26:55

您可以创建多少个连接来获取内容是有限制的。您所看到的是,像Promise.all()这样的方法还不够“智能”,无法避免遇到这样的限制。

基本上,当您调用Promise.all()时,您会告诉计算机“同时执行所有这些操作,顺序并不重要,并在完成时给我所有输出。顺便说一句,如果其中一个操作失败,则停止所有操作并丢弃所有其他结果”。它在许多情况下都非常有用,但当试图从网络上获取800多个东西时,可能就不是那么有用了。

所以,是的,除非你能调整要求,比如允许的并发连接数或脚本可以使用的内存,否则你很可能不得不分批完成这项工作。可能一次对100个作业的切片使用一个Promise.all(),然后是下一个切片。您可以考虑使用async库和mapLimit方法,或者使用自己的方式将作业列表分割成批处理。

票数 3
EN

Stack Overflow用户

发布于 2021-06-27 02:31:42

这可能是一个基于其使用的node version的问题

但是for await也可能是你的一个选择……

票数 1
EN

Stack Overflow用户

发布于 2021-06-29 18:41:24

您可以利用axios.all而不是Promise.all

代码语言:javascript
运行
复制
const urlList = [];

for (let i = 1; i <= 80; i++) {
  const url = `myApiUrl`;
  urlList.push(url);
}

const promises = urlList.map(url => axios.get(url));
const responses = await axios.all(promises);

return responses;

https://codesandbox.io/s/multiple-requests-axios-forked-nx1z9?file=/src/index.js

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68072777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档