当前位置: 首页 > 知识库问答 >
问题:

Intellij Idea警告-使用aysnc/WAIT时“已忽略promise返回”

王才英
2023-03-14

我在Node.js v7.3的代码中使用了Express.js。在这里,我创建了一个用户路由器,它将请求转发给我的用户控制器

我在用户控制器中使用async/await执行异步调用。问题是IntelliJ给了我一个警告说

忽略从login()返回的promise。

问题是我甚至没有从log()方法返回任何东西。

这是代码-

UserRouter.js

router.post('/login', function (req, res, next) {
    userController.login(req, res); // I get the warning here
});

UserController.js

exports.login = async function (req, res) {
    try {
        const verifiedUser = await someFunction(req.body.access_code);
        let user = await User.findOrCreateUser(verifiedUser);
        res.status(200).send(user);
    }
    catch (err) {
        res.status(400).send({success: false, error: err});
    }
};

如果我只使用本机promise编写相同的登录方法,则不会收到此警告。我是理解错了还是IntelliJ错了?

编辑-

感谢@Stephen,我知道异步函数会返回一个promise,但如果Intellij识别出异步函数没有返回任何东西,并且没有显示该警告,那不是更好吗?因为当我在login()函数之后链接.then(),它向then结果中提供了一个未定义的对象。这意味着,如果我们不显式地从异步函数返回某些内容,那么将返回undefined?


共有3个答案

尚恩
2023-03-14
router.post('/login', function (req, res, next) {
    void userController.login(req, res); // I get the warning here
});
翟鸿振
2023-03-14

问题是我甚至没有从login()方法返回任何东西。

声明为“async”的函数根据定义返回promise。例如,见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

然而,这种想法只是一种检查。您可以按警告上的“alt-enter,right”,并更改检查级别以消除警告。检查在“JavaScript”中-

奚英朗
2023-03-14

userController.login()函数返回一个promise,但是通过使用它的then()函数,您不会对promise的结果做任何事情。

例如:

userController.login(req, res).then(() => {
    // Do something after login is successful.
});

或在ES2017语法中:

await userController.login(req, res);

如果你真的不想在那里做任何事情,我想你可以忽略这个警告。警告主要是因为在promise上不使用then()函数通常是一种代码味道。

 类似资料:
  • 忽略编译器警告 格式 #pragma clang push #pragma clang diagnostic ignored "错误类型" // 存在警告的代码 #pragma clang pop > 1.在需要忽略的警告处右键 -- Reveal in Log 2.会给出警告的详细信息,其中包括警告的类型 3.高亮选中的便是这个警告的类型 4.在警告代码处增加如下代码 Command

  • 必须将promise的回调定义为异步,这似乎有内在的问题: 这显然是一种反模式,因此可能会出现编码问题。我知道,即使在/块中放置语句,也很容易在此处捕获错误。 我的第一个问题是,当一个人想要用不同的resolve/reject值转发一个promise时,编写这样的代码的最佳方式是什么?那么,你要什么?即。 或者你只是按照这里的建议把它全部去掉? 但是,您如何解释这样的代码呢? 我觉得我把事情弄得比

  • 告警策略即针对监控指标设置阈值,当资源的指标超过阈值时,将会立即通过通知渠道向用户发送告警消息,使用户可以快速响应解决问题。 告警策略即针对监控指标设置阈值,当资源的指标超过阈值时,将会立即通过通知渠道向用户发送告警消息,使用户可以快速响应解决问题。 目前系统内置以下默认策略: process.zombies:检测节点上僵尸进程大于10时告警。 process.total:检测节点上进程数大于20

  • 问题内容: 我有一个统计问题的功能: 有时我会从外壳中收到以下警告: 我使用numpy函数更正其他文件中的函数结果,因此不需要此警告。 有没有办法忽略该消息?换句话说,我不希望外壳程序打印此消息。 我不想禁用所有python警告,仅禁用这一警告。 问题答案: 您可以使用禁用警告。将其放在可能的除以零之前: 这将全局禁用零除警告。如果只想禁用它们一点,可以在子句中使用: 对于零除零除法(不确定,导致

  • 同时将warning的值设置为“all”或,没有任何结果。 checkstyle的文档很差。一些想法?

  • 问题内容: 使用PMD,如果要忽略特定的警告,则可以使该行被忽略。 FindBugs有类似的东西吗? 问题答案: FindBugs的初始方法涉及XML配置文件(也称为过滤器)。这确实不如PMD解决方案方便,但是FindBugs只能在字节码上工作,而不能在源代码上工作,因此注释显然不是一个选择。例: 但是,为解决此问题,FindBugs稍后引入了另一个基于注释的解决方案(请参阅参考资料),您可以在类