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

305
Visualizações
TypeScript/Eslint arroja un error de "Promesa devuelta" en una ruta asíncrona de Express Router

Tengo la siguiente configuración de punto final para restablecer una base de datos después de las ejecuciones de prueba:

 import { getConnection } from 'typeorm'; import express from 'express'; const router = express.Router(); const resetDatabase = async (): Promise<void> => { const connection = getConnection(); await connection.dropDatabase(); await connection.synchronize(); }; // typescript-eslint throws an error in the following route: router.post('/reset', async (_request, response) => { await resetTestDatabase(); response.status(204).end(); }); export default router;

Toda la ruta desde async está subrayada con un error TypeScript-eslint Promise returned in function argument where a void return was expected.

La aplicación funciona perfectamente, pero no estoy seguro de si debería hacer una implementación más segura o simplemente ignorar/deshabilitar Eslint para esta. ¿Alguna idea de lo que está mal con ese código?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Parece que está utilizando la regla de promesas sin uso indebido que establece que no puede devolver Promise<void> en un lugar donde se espera void .

Esto significa que no puede devolver Promise<void> desde su controlador Express porque el tipo de devolución de RequestHandler de la biblioteca especifica que el tipo de devolución debe ser void . Le sugiero que lo cambie para devolver Promise<Response> agregando una simple palabra clave de return :

 import { getConnection } from 'typeorm'; import express from 'express'; const router = express.Router(); const resetDatabase = async (): Promise<void> => { const connection = getConnection(); await connection.dropDatabase(); await connection.synchronize(); }; // typescript-eslint throws an error in the following route: router.post('/reset', async (_request, response) => { await resetTestDatabase(); return response.status(204).send(); // <----- return added here }); export default router;

La otra opción sería evitar usar async/await :

 router.post('/reset', (_request, response) => { resetDatabase().then(() => response.status(204).send()); });
over 4 years ago · Santiago Trujillo Relatório

0

Encontré una solución que no implica usar then() y te permite usar la abstracción de async sin que el eslint te maldiga, hay dos soluciones (pero recomiendo más la segunda)

Primera solución: usar "inside async"

Esto es básico usando un asíncrono dentro del vacío como este:

 router.post('/reset', (_request, response) => { (async () => { await resetTestDatabase(); response.status(204).end(); })() });

Segunda solución (recomendada) : "Superposición de tipos"

La segunda opción es que lo uses como asíncrono, como siempre, pero di "oye, TypeScript, nada está mal aquí, jeje" con la palabra clave "as".

 import { RequestHandler } from 'express' router.post('/reset', (async (_request, response) => { await resetTestDatabase(); response.status(204).end(); }) as RequestHandler);
over 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