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

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

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