#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)