没有内存过载的Node.js API请求循环

时间:2019-02-27 09:27:39

标签: node.js axios

这似乎很奇怪,但是我正在尝试尽可能多地刷新API,直到response.data值达到一定数量为止。这是我的下面的代码

const axios = require('axios');
const api = require('./api.json');
const infinity = 0;

let url = 'http://api.site.com/api.php?i=${api[item].appid}';

function api_call(item){
  axios.get(url)
    .then(response => {
      let id = response.data.id;
      if (id > 10){
        return true;
      }else{
        return false;
      }
    })
    .catch(error => {
      console.log(error);
    });
  }

  function loop(variable) {
    while (infinity < 1) {
      if (api_call(variable) > true) {
        break;
        console.log('Found');
      }
      console.log('-');
    }
  }

这似乎很奇怪,但是很显然,我已经对其进行了修改,尽管该代码仍然可以实现与我要用代码完成的目标相似的目标。基本上,它监视API,直到值更改触发操作为止。可能是我做错了,但是当我运行这段代码时(只有更改是API和值名称),我开始使用大量内存,直到程序停止并给我这个错误

<--- Last few GCs --->

[11524:000001E5724778C0]    93390 ms: Mark-sweep 1395.2 (1426.2) -> 1394.5 (1425.7) MB, 629.4 / 0.0 ms  (average mu = 0.139, current mu = 0.053) allocation failure scavenge might not succeed
[11524:000001E5724778C0]    94039 ms: Mark-sweep 1395.4 (1425.7) -> 1394.8 (1426.2) MB, 638.3 / 0.0 ms  (average mu = 0.079, current mu = 0.016) allocation failure scavenge might not succeed


<--- JS stacktrace --->

还有更多信息(如果需要的话,我可以编辑该帖子并将其包含在内),我相信这是由于我如何收集数据而引起的,也许我忘记了某些过程,我不确定并且找不到与此相关的任何类似主题。在此先感谢您的帮助。如果需要更多信息,请问我会添加更多。 enter image description here

1 个答案:

答案 0 :(得分:0)

我在附近玩了一点,这就是我最终开始工作的原因。

     const axios = require('axios');
     const api = require('./api.json');
     const infinity = 0;   

    function api_call(item) {
      let url = `http://api.site.com/api.php?i=${api[item].appid}`;
        axios.get(url)
    .then(response => {
      let id = response.data.id;
      if (id > 10){
        return true;
      }else{
        return false;
      }
    })
    .catch(error => {
      console.log(error);
    });
  }

    async function checkAPI(variable) {
      const res = await api_call()

      if (res) {
        //success
      } else {
        //Fail
      }
    }

    checkAPI();