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

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

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 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