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

89
Vistas
Esperar respuesta en bucle

Tengo un punto final que genera algunos datos (lleva algo de tiempo) y otro que puedo usar para obtener los datos generados. Llamo al primero con espera, tomo la identificación de la respuesta y quiero llamar al segundo, mientras que su estado no sea "Éxito" (significa datos preparados y almacenados en respuesta) y continúo mi script.

Aquí mi código

 let data = ['foo', 'bar'] let res = await client.post('ninbexec/v2/executions', data) let result_id = res.data[0].id while (true) { let resp = await client.get(`ninbexec/v2/executions/${result_id}`) if (resp.data.status === 'SUCCEEDED') { response = JSON.parse(resp.data.result.dataset) break; } }

funciona, pero gané tantas solicitudes, ¿cómo puedo configurar un intervalo para las solicitudes? Intenté con await setInterval(), pero el código continúa ejecutándose y no espera el resultado

por ejemplo, también uso axios, si tiene algún truco de ballet para eso será más mejor

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No desea utilizar setInterval para este caso. Quiere usar setTimeout .

No puede usar setTimeout con await ya que no devuelve una Promesa.

Es una API antigua y usa un estilo de devolución de llamada, como este:

 setTimeout(() => console.log('do something after 1000 ms'), 1000)

Esto no es muy conveniente si desea utilizar la sintaxis de await .

Lo que puede hacer es "prometer" la función setTimeout , lo que significa crear otra versión de la función que estará basada en Promise.

Suena muy elegante, pero en realidad es bastante fácil de hacer, aquí hay un ejemplo:

 function pSetTimeout(timeout){ return new Promise((resolve) => { setTimeout(() => resolve(), timeout) }) }

Simplemente envuelve la llamada a setTimeout dentro de una Promesa y llama a resolve cuando se llama a la devolución de llamada.

Entonces todo tu código se vería así:

 let data = ['foo', 'bar'] let res = await client.post('ninbexec/v2/executions', data) let result_id = res.data[0].id while (true) { let resp = await client.get(`ninbexec/v2/executions/${result_id}`) if (resp.data.status === 'SUCCEEDED') { response = JSON.parse(resp.data.result.dataset) break; } await pSetTimeout(10000) // for exemple, wait for 10 seconds }

Asegúrese de comprender completamente qué es una función basada en Promise y la diferencia entre el antiguo estilo de función de devolución de llamada.

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