Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda