Async / Await с Axios застрять - PullRequest
1 голос
/ 04 июля 2019

Вот что я пытаюсь сделать: я перебираю файл json, полный ссылок нашего веб-сайта, используя цикл for (около 3000 ссылок), внутри цикла я делаю аксиос для каждой ссылки и получаю код статуса ответа (буду делать другие вещи в будущем). Мой код застревает при случайной итерации. Иногда на 125-й ссылке, иногда на 178, иногда на 300. Моя консоль просто сидит без ошибок enter image description here

Похоже, что в некоторых случайных ссылках запрос get занимает слишком много времени, как мне пропустить ссылку, которая занимает слишком много времени, или, может быть, я могу установить тайм-аут для каждого запроса get, и если ничего не возвращается в это определенное время, пропустить итерация

Я пытался поставить 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)
  }
...