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

218
Vistas
Cómo esperar el final de la promesa pero con tiempo de espera

Tengo una API REST codificada con Node.js y hay una ruta que aplica los derechos NTFS a las carpetas. La solicitud puede tardar 1 segundo pero también puede durar varios minutos (depende del tamaño de la carpeta).

En resumen, si los derechos tardan menos de 5 segundos en aplicarse, quiero devolver el valor con el código 200.

Si los derechos no han terminado de aplicarse me gustaría devolver el valor con el código 202

 ... inProgress = true; ApplyRights() .then(() => { inProgress = false } // Here I want to return as fast inProgress = false otherwise wait a bit but max 5s return ...;

Traté de esperar un poco con setTimeout así:

 const sleep = s => new Promise(resolve => { setTimeout(resolve, s * 1000) }); let nbCheck = 0; while (inProgress && nbCheck < 5){ await sleep(1) nbCheck++; }

Pero setTimeout no se llama antes del final de mi promesa anterior (ApplyRights). Leí aquí que la promesa se ejecuta antes de setTimeout

Entonces, traté de encontrar una solución sin setTimeout e intenté esto: (Sé que no es muy elegante)

 let dateStop = Date.now() + 5 * 1000; while (dateStop = Date.now() && inProgress){} return ...;

Pero en este caso, el .then() de ApplyRights solo se alcanza al final de los 5s.

¿Hay alguna manera de dejar que mi promesa ApplyRights haga su trabajo? Y si el trabajo lleva tiempo, espere un máximo de 5 segundos antes de devolver la respuesta. Si el trabajo es rápido, quiero devolver las respuestas sin esperar.

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

0

Puedes usar Promise.race :

 Promise.race([ApplyRights(), sleep(5)]).then(result => { if (result === undefined) { // Timeout of 5 seconds occurred // Some message to the user? } else { // Got reply within 5 seconds // Do something with the result } });

Sin embargo, tenga en cuenta que esto no interrumpe el trabajo de ApplyRights() , que eventualmente aún puede hacer el trabajo.

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