Tengo una matriz llamada tablas que necesito iterar, pero en mi código actual está iterando y luego deteniéndose en el primer índice de la matriz ignorando el resto de los valores de la matriz.
Mi código:
async function scrapeSiteYield(){ var yield = []; var country = []; const yieldResult = await axios.get("https://tradingeconomics.com/forecast/government-bond-10y"); const $ = cheerio.load(yieldResult.data); var tables = ["8","12","16","20","24"]; var count = 1; tables.forEach(function (item, index) { var scrapeStatus = false; while (!scrapeStatus) { var res = {}; $(`#aspnetForm > div.container > div > div > div:nth-child(${item}) > div > table > tbody > tr:nth-child(${count}) > td.datatable-item-first`).each((index, element) => { console.log(item); console.log($(element).text().trim()); res.country = $(element).text().trim(); }); if (res.country == null || res.country === undefined) { scrapeStatus == true; break; } else{ count++; yield.push(res); } } }); } scrapeSiteYield();
mi resultado:
8 UK 8 Germany 8 Russia 8 Italy 8 France 8 Switzerland 8 Czech Republic 8 Ireland 8 Portugal
Entonces, los valores 12,16,20,24 en mi matriz de tablas no se iteran, ¿cómo puedo solucionar esto?
En realidad, nunca asigna true
a scrapeStatus
.
este codigo
if (res.country == null || res.country === undefined) { scrapeStatus == true; break; }
Debería verse así:
if (res.country == null || res.country === undefined) { scrapeStatus = true; }
1- La cláusula while
se romperá cuando scrapeStatus
sea verdadero de acuerdo con su código. No es necesario agregar un descanso.
2- Asigne true
a scrapeStatus
en lugar de verificar si es true
.
Tienes dos bucles. El bucle jQuery each()
está dentro del bucle tables.forEach()
, lo que significa que recorrerá todos los elementos con el mismo elemento de la matriz de tablas.
Para solucionar esto, debe itirar la matriz de tablas dentro del bucle each()
, algo así:
elements.each((index, element) => { let tableIndex = 0; if(index < tables.length){ tableIndex = index; } console.log(tables[tableIndex]); console.log($(element).text().trim()); res.country = $(element).text().trim(); });