gpt4 book ai didi

node.js - TypeScript/Eslint 在 Express Router 异步路由上抛出 'Promise returned' 错误

转载 作者:行者123 更新时间:2023-12-04 03:29:59 24 4
gpt4 key购买 nike

我有以下端点设置来在测试运行后重置数据库:

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;
全程自 async下划线带有 typescript-eslint 错误 Promise returned in function argument where a void return was expected.该应用程序运行良好,但我不确定我是否应该进行更安全的实现,或者只是忽略/禁用 Eslint。知道该代码有什么问题吗?

最佳答案

看来您正在使用 no-misused-promises规定您不能返回的规则 Promise<void>在一个地方void是期待。
这意味着您不能返回 Promise<void>来自您的 Express 处理程序,因为返回类型为 RequestHandler从库中指定返回类型应为 void .我建议您将其更改为返回 Promise<Response>通过添加一个简单的 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;
另一种选择是避免使用 async/await :
router.post('/reset', (_request, response) => {
resetDatabase().then(() => response.status(204).send());
});

关于node.js - TypeScript/Eslint 在 Express Router 异步路由上抛出 'Promise returned' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67114152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com