node.js - 通过 url 请求多个 JSON 文件
问题描述
我有一个充满 JSON 文件的目录,我试图通过 URL 下载这些文件,然后在 node.js 中的数组中进行操作
URL 格式很简单,www.webpage.com/directory/filenumber.json,所以我可以轻松地创建一个 for 循环并使用 Promise 一个一个地遍历每个 json 文件。
for (var i = 1; i < 800; i++)
{
await delay(100)
var promise = new Promise( (resolve, reject) => {
let temp = new Object;
temp["id"] = I;
https.get(url + i.toString(),(res2) => {
let body = "";
res2.on("data", (chunk) => {
body += chunk;
});
res2.on("end", () => {
try {
let json = JSON.parse(body);
dataArray.push(json);
resolve();
} catch (error) {
console.error(error.message);
console.log("")
};
});
}).on("error", (error) => {
console.error(error.message);
})
})
promiseArray.push(promise);
console.log("promise pushed to array "+i)
}
console.log("[SYSTEM] All promises submitted, waiting for set to resolve...")
// Once all promises are finished
Promise.all(promiseArray).then((values) => {
console.log("done")
console.log(util.inspect(dataArray, false, null, true))
}
随着文件数量的增加,这需要很长时间才能完成,而且我不得不手动给出延迟时间,因为如果它执行得太快,我会返回 503 状态或关于太多请求的错误。相反,我发现了一些关于使用父/子进程并在它们之间传递消息的选项,这有很大帮助。我能够为我的 CPU 的每个线程创建一个子线程,但我仍然遇到必须手动延迟(并错开子请求)的问题。有没有更好的方法一次请求这么多文件?
我现在正在使用 node.js,但是如果 node 有限制,我很乐意完全更改平台,我只需要请求所有文件,对数组进行一些操作,然后将一些内容写入本地文件。很简单,只需要找到如何更快地请求它们。
提前致谢!
解决方案
推荐阅读
- c - 为什么/如何调用 printf 更改我的函数的结果?
- swift - 对 Struct 的 NSString 值求和
- node.js - 使用nodemailer发送电子邮件时如何设置“发件人”
- android - 如何从 Android 原生应用程序中获取 Google 电子表格值(2020 年)
- delphi - 如何设置 Mock 以测试是否根据 CUT 中的条件调用方法
- jmeter - 如何解决 Web 套接字 I/O 错误:jmeter 中的连接被拒绝?
- javascript - 在 Xamarin.Forms iOS 中的 Javascript 和 WebView 本机代码之间进行通信
- blazor - Blazor Web 程序集重定向到控制器
- javascript - Puppeteer - 测试页面的不同选择器
- javascript - 将 JSON 文件绑定到 Echarts(JQuery 获取)