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

101
Vistas
comprobar el estado de la URL antes de cumplir una promesa

Tengo un caso de uso atípico para el corredor de pruebas de Cypress, donde necesito iniciar el servidor desde dentro de Cypress. Lo estoy haciendo definiendo el anzuelo before:spec en cypress plugins/index.js así:

 module.exports = (on, config) => { on('before:spec', async(spec) => { // the promise will be awaited before the runner continues with the spec return new Promise((resolve, reject) => { startServer(); // keep checking that the url accessible, when it is: resolve(null) while (true) { getStatus(function(statusCode) { if (statusCode === 200) break }) }; resolve(null)

Estoy luchando por implementar este bucle while que se supone que debe seguir comprobando si se puede acceder a la URL antes de cumplir la promesa before:spec . Tengo la siguiente función para verificar la URL:

 function getStatus (callback) { const options = { hostname: 'localhost', port: 8080, path: '/', method: 'GET' } const req = http.request(options, res => { console.log(`statusCode: ${res.statusCode}`) callback(res.statusCode} }) req.on('error', error => { console.error("ERROR",error) }) req.end() };

Se agradece cualquier ayuda para implementar ese bucle u otras sugerencias sobre cómo lograr la tarea de verificar la URL antes de cumplir con la promesa before:spec .

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Idealmente, su función startServer debería devolver una promesa y en el anzuelo before:spec simplemente await startServer(); . O al menos debería aceptar una devolución de llamada que llamó cuando se completó la inicialización del servidor. Pero supongamos que eso no es posible, así que aquí hay otra solución para el código dado:

 function getStatus() { return new Promise((resolve, reject) => { const options = { hostname: 'localhost', port: 8080, path: '/', method: 'GET' } const req = http.request(options, res => { console.log(`statusCode: ${res.statusCode}`) resolve(res.statusCode); }) req.on('error', error => { console.error("ERROR", error); reject(error); }) req.end() }); }; module.exports = (on, config) => { on('before:spec', async (spec) => { // the promise will be awaited before the runner continues with the spec startServer(); // keep checking that the url accessible, when it is: resolve(null) while (await getStatus() !== 200) { await (new Promise(resolve => setTimeout(resolve, 50))); } }); }

Su intento original con el ciclo while tenía fallas graves ya que no puede romperse así e inundó su servidor con solicitudes.

Solo hay una parte extraña en la actual, await (new Promise(resolve => setTimeout(resolve, 50))); . Esto es simplemente para evitar inundaciones, démosle 50 ms si el servicio aún no estaba listo. Si sabe que su servicio es realmente más lento al comenzar, siéntase libre de ajustar esto, pero valores mucho más bajos no tienen mucho sentido. En realidad, ni siquiera es estrictamente necesario, ya que la condición en el ciclo while garantiza que solo se ejecutará una solicitud a la vez. Pero me sentí un poco más seguro de esta manera, no tiene sentido intentar servir con demasiada frecuencia si todavía se está calentando.

También tenga en cuenta que es posible que desee resolve(500) u omitir resolver/rechazar en req.on ('error') ya que no sé si su servidor está listo de inmediato para devolver el código de estado adecuado, depende de la implementación de startServer .

about 4 years ago · Santiago Trujillo 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