Приветствие. Не удается получить данные внутри тела ПОПЫТКИ после обработки ошибки другой функции

#javascript #node.js #cheerio

#javascript #node.js #приветствие

Вопрос:

Существует такой код, как этот:

 const axios = require('axios');
const cheerio = require('cheerio');
let data = null;



const parseNewCorporations = async (iter) => {
  
  let link2 = 'https://www.finanzen.net/aktien/'   iter.finanzen_net   '-aktie';
  try{
    await axios.get(link2)
      .then(res => res.data)
      .then(res => {
        
        let html = res;
        
        $ = cheerio.load( html, { decodeEntities: false } );
        let bigData = iter;
        
        let price = $('div.snapshot-headline div.col-sm-7 div.row.quotebox:first-child div.col-xs-5.col-sm-4.text-sm-right.text-nowrap').text();
        let currency = $('div.snapshot-headline div.col-sm-7 div.row.quotebox:first-child div.col-xs-5.col-sm-4.text-sm-right.text-nowrap span').text();
        price = price.replace(currency, '').replace(',', '.');
      })
  }
  
  catch(e){
    console.log(e.message, ', id =', iter.id, ", finanzen_net = " iter.finanzen_net);
    await getAdditionPriceBilanzGuv(iter);
  }
};



const getAdditionPriceBilanzGuv = async (iter) => {
  
  //console.log('111', iter); // **here the code works correctly**
  
  let link = 'https://www.finanzen.net/bilanz_guv/'  iter.finanzen_net;
  
  try{
    await axios.get(link)
      .then(res => res.data)
      .then(res => {
        
        console.log('getAdditionPriceBilanzGuv', iter);
        // **here the code works NOT correctly**
        
      })
  }
  
  catch(e){
    if(e.message == 'Request path contains unescaped characters'){
      console.log('Request path contains unescaped characters');
      console.log({paramSubLink: iter.finanzen_net, corporations_id: iter.id});
    }
    else{
      console.log('paramCorporationsId: ', iter.id);
      //console.log('err- ', e);
    }
  }
};



function getApiData(){
  
  // get request
      return axios.get("https://seo-gmbh.eu/invest/daily.php" , {
      })
      .then(response => {
        return response.data;
      })
      .catch(function (error) {
        console.log(error);
      });
}



async function new_corporations() {
    data = await getApiData();
    let ii = 1;
    for (let iter of data.new_corporations) {
        //await parseNewCorporations(iter);
        
        ii  ;
        await setTimeout(function(){
            parseNewCorporations(iter);
        }, ii*3000);
        

    }
    //console.log(arrayCurrency);
}


new_corporations();
 

После вызова parseNewCorporations () функции catch () срабатывает исключение, в результате чего
в консоли можно увидеть соответствующие сообщения.

Проблема в том, что когда появляется эта ошибка, вам нужно запустить следующую функцию getAdditionPriceBilanzGuv () с iter параметром, и внутри тела try {} вам нужно получить этот параметр, что невозможно сделать.

В самом начале (вне тела try {} ) этой функции (где комментарием указано, что код работает) можно получить этот параметр.
Вопрос:
Чего мне не хватает и как я могу получить этот параметр во вновь вызванной функции внутри тела try {} ?

Если это невозможно сделать, какие альтернативные реализации могут быть для решения этой проблемы?

P.S. В этом случае используется библиотека синтаксического анализа cheerio

Ответ №1:

Если вы используете async / await, вы не хотите then , чтобы s

 let res = await axios.get(link2)
let $ = cheerio.load(res.data)