Node fetch循环太慢
Node fetch循环太慢
我有一个API的js文件,我使用POST方法调用它,将一个包含网站URL的对象数组(大约26个对象或URL)作为请求体传入,通过下面的代码循环遍历这个数组(sites),检查每个对象的URL是否返回一个JSON,方法是在URL后面添加"/items.json",如果是,则将JSON内容推送到另一个最终数组siteLists中,并将其作为响应返回。
问题是,对于仅有的26个URL,这个API调用需要超过5秒才能完成,我是做错了还是fetch在Node.js中的工作方式就是这样?
const sites的内容如下:
[{label: "JonLabel", name: "Jon", url: "jonurl.com"},{...},{...}]
代码如下:
export default async (req, res) => {
if (req.method === 'POST') {
const body = JSON.parse(req.body)
const sites = body.list // 上面显示的内容
var siteLists = []
if (sites?.length > 0){
var b=0, idd=0
while (b < sites.length){
let url = sites?.[b]?.url
if (url){
let jurl = `${url}/items.json`
try {
let fUrl = await fetch(jurl)
let siteData = await fUrl.json()
if (siteData){
let items = []
let label = sites?.[b]?.label || ""
let name = sites?.[b]?.name || ""
let base = siteData?.items
if(base){
var c = 0
while (c < base.length){
let img = base[c].images[0].url
let titl = base[c].title
let obj = {
url: url,
img: img,
title: titl
}
items.push(obj)
c++
}
let object = {
id: idd,
name: name,
label: label,
items: items
}
siteLists.push(object)
idd++
}
}
}catch(err){
//console.log(err)
}
}
b++
}
res.send({ sites: siteLists })
}
res.end()
}
}
编辑:(解决方案)
所以,根据下面建议的使用promise的代码作为解决方案来看,它的运行速度更快,有趣的是,它仍然需要超过5秒才能加载,并且仍然会抛出错误:
Failed to load resource: the server responded with a status of 504 (Gateway Time-out)
因为Vercel,在那里托管应用程序的服务器端函数的超时设置为5秒,因此无法加载响应中的内容。在我没有超时限制的本地环境中,加载速度明显更快,但令我惊讶的是,这样的查询需要如此长的时间才能完成,它本应该是毫秒级的。