首页 > 解决方案 > 通过 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 有限制,我很乐意完全更改平台,我只需要请求所有文件,对数组进行一些操作,然后将一些内容写入本地文件。很简单,只需要找到如何更快地请求它们。

提前致谢!

标签: node.jsjsonget

解决方案


推荐阅读