异步/等待与Axios卡住

时间:2019-07-03 22:17:36

标签: javascript node.js async-await axios bluebird

这是我想做的事情:我使用for循环(约3000个链接)遍历一个包含我们网站链接的json文件,在循环内我为每个链接执行axios获取并获取响应状态代码(将来还会做其他事情)。我的代码被卡在随机迭代中,有时在第125个链接上,有时在178上,有时在300上。我的控制台坐在那里,没有错误enter image description here

似乎在某些链接上,随机的获取请求花费的时间太长,我该如何跳过花费时间太长的链接,或者我可以为每个获取请求设置超时,如果在特定时间内没有任何返回,则跳过该请求迭代?

我尝试将try catch放到任何地方,没有日志记录,我也尝试使用blubird map而不是loop,这是同一笔交易,任何人都知道发生了什么吗?

var cheerio = require('cheerio');
var axios = require('axios');
const fs = require('fs');
var four04 = "404";
var statusCheck = 0;

var main = [];
let rawdata = fs.readFileSync('C:/Users/jay/Documents/crawl/filtered.json');
let jsonParsed = JSON.parse(rawdata);

async function makeRequests (lines) {
    for (const line of lines) {


      try {
        const encodedLink = encodeURI(line.link)
        statusCheck =statusCheck+1
        console.log(encodedLink +" : "+ statusCheck)
        const response = await axios.get(encodedLink)
        console.log(response.status)

      } catch (error) {

          var Status_ErrorsCatch = {
              "status Code": error.response.status ? error.response.status : "No status code available",
              "Page title:": $('title').text() ? $('title').text() : 'No title avaialble',
              "Original Link": encodedLink ? encodedLink : "No Original Link Available",
          }
          main.push(Status_ErrorsCatch)
      }
    }

  }
  
  try {
    makeRequests(jsonParsed)

  } catch (error) {
      console.log("whole function error",error)
  }

0 个答案:

没有答案