Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
Llamar a una función varias veces en un ciclo while

Estoy tratando de obtener datos de una llamada de función y los mantengo en un ciclo while para que la función se llame una y otra vez si no se reciben los datos. Lo que quise decir con los datos es que las matrices data1, data2 y data3 que devolví de la función getData deben completarse y no tener un valor nulo. Pero no soy capaz de encontrar la solución.

Aquí está mi código:

 router.get('/someurl' , async(req,res) => { let data = []; while(data.length == 0) { data = await functionCall() console.log(data) } })

Y aquí está el formato de mi código functionCall:

 const unirest = require("unirest"); const cheerio = require('cheerio') const getData = async() => { const data1 = [] , data2 = [] , data3 = [] ; try { const response = await unirest .get('url') .headers({'Accept': 'application/json', 'Content-Type': 'application/json'}) .proxy("proxy") const $ = cheerio.load(response.body) $('hided').each((i,el) => { data1[i] = $(el) .find('hided') .text() data2[i] = $(el) .find('hided') }) $('hided').each((i,el) => { data3[i] = $(el) .find('hided') .text() }) if(data1.length && data2.length && data3.length)) { return [data1 , data2 , data3] } } catch(error) { console.log("Error" , error); } return []; } module.exports = getData
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Suponiendo que fetchData es una llamada a la API, no hay motivo para definir data inicialmente. Simplemente puede registrar los resultados de llamar a esa API hasta que los resultados sean una matriz vacía.

 const data = [1, 2, 3, 4]; // A simple API that returns a reduced array // on every call function mockApi() { return new Promise(res => { setTimeout(() => { res([...data]); data.shift(); }, 1000); }); } // Call the API, and if the the response // has zero length log "No data" otherwise // log the data, and call the function again. async function fetchData() { const data = await mockApi(); if (!data.length) { console.log('No data'); } else { console.log(data); fetchData(); } } fetchData();

about 4 years ago · Juan Pablo Isaza Denunciar

0

En primer lugar, elimine la declaración if, ya que es literalmente lo que está haciendo el ciclo while. luego elimine await, ya que esto no está en una función asíncrona, y generará un error.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba algo como esto.

 const fetchData = async ()=>{ data = await functionCall() if(data.length==0){ fetchData() }else{ return} }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda