Tengo estos dos ejemplos de código:
no1
const r = new Array(); for (i = 0; i < 5; i++) { const vari = 'print'; r.push(vari); } console.log(r); el registro de la consola de esto es [ 'print', 'print', 'print', 'print', 'print' ]
no2 (usando Cheerio para raspar)
const sqft = new Array(); for (k = 0; k < links.length; k++) { request(`${links[k]}`, (error, response, html) => { const $ = cheerio.load(html); const pr = $('div[class="df2 "]').first().text(); sqft.push(pr); }); } console.log(sqft); Los enlaces se insertan en la solicitud antes de esto. Ahora, cuando consola. log (sqft) obtengo [] . Si lo consuelo. Lo registro dentro del bucle, mostrará datos. ¿Es la diferencia entre el número 1 y el número 2 o Cheerio está creando un problema? ¡Gracias!
Parece que tiene una operación asíncrona. Por lo tanto, debemos usar las palabras clave async y await para que la ejecución sea sincrónica:
async function yourFunction() { const sqft = new Array(); for (k = 0; k < links.length; k++) { // here we are waiting for the promise to be resolved let res = await request(); const $ = cheerio.load(res.html); const pr = $('div[class="df2 "]').first().text(); sqft.push(pr); } }así es como puedes hacer tus cosas con axios
const sqft = new Array(); for (k = 0; k < links.length; k++) { const res = await axios .get(`${links[k]}`) .then((result) => { // do youre logic // const $ = cheerio.load(html); const pr = $('div[class="df2 "]').first().text(); sqft.push(pr); }) .catch((err) => { //handle error console.log("error"); }); } console.log(sqft); async function doSomeThing() { const sqft = new Array(); for (k = 0; k < links.length; k++) { const res = await axios.get(`${links[k]}`); // logic // .... // sqft.push(pr); } console.log(sqft); }