gpt4 book ai didi

node.js - 对 GetStaticProps 的许多请求卡住了我的应用程序构建并返回服务器错误

转载 作者:行者123 更新时间:2023-12-05 01:29:03 24 4
gpt4 key购买 nike

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

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

以下包含 80 个项目的代码确实有效

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 之外工作))

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;

控制台错误:

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

网页错误:

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 请求的新手,有什么方法可以优化它吗?

最佳答案

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

基本上,当你调用 Promise.all() 时,你告诉计算机“同时做所有这些事情,顺序无关紧要,完成后给我所有的输出。顺便说一下,如果其中一个操作失败停止一切并丢弃所有其他结果”。它在许多情况下都非常有用,但在尝试从网上获取超过 800 件东西时可能不是这样。

所以是的,除非您可以调整允许的同时连接数或脚本使用的内存等要求,否则您可能必须分批执行此操作。也许一个 Promise.all() 一次用于 100 个作业的切片,然后是下一个切片。你可以看看使用 async图书馆和 mapLimit方法或滚动您自己的方式将作业列表分成批处理。

关于node.js - 对 GetStaticProps 的许多请求卡住了我的应用程序构建并返回服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68072777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com