I have the following endpoint setup to reset a database after test runs:
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;
The entire route since async
is underlined with a typescript-eslint error Promise returned in function argument where a void return was expected.
The app works perfectly but I'm not sure if I should be doing a safer implementation or just ignoring/disabling Eslint for this one. Any idea of what's wrong with that code?
It seems you are using the no-misused-promises rule which states that you cannot return Promise<void>
in a place where void
is expected.
This means that you cannot return Promise<void>
from your Express handler because the return type of RequestHandler
from the library specifies that the return type should be void
. I would suggest that you change it to return Promise<Response>
by adding a simple return
keyword:
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;
The other option would be to avoid using async/await
:
router.post('/reset', (_request, response) => {
resetDatabase().then(() => response.status(204).send());
});