Intellij Idea警告 – 用aysnc / await“返回的Promise被忽略”

我使用Node.js v7.3在我的代码中使用Express.js 。 在此我创build了一个User Router ,将请求转发给我的User Controller

我在User Controller内部使用async / await来执行asynchronous调用。 问题是IntelliJ给了我一个警告

从login()返回的Promise被忽略。

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

这是代码 –

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}); } }; 

如果我使用本地承诺编写相同的login方法,那么我不会得到这个警告。 我在这里理解错误,或者是IntelliJ有错?

编辑 –

感谢@Stephen,我明白一个asynchronous函数会返回一个承诺,但如果Intellij确定没有任何东西从asynchronous函数返回,并且不会显示警告,因为当我链接.then()之后login()函数,它提供了一个undefined对象,然后结果。 这意味着如果我们不明确地从asynchronous函数返回一些东西,那么undefined被返回?

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

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

但IDEA警告只是一个检查。 您可以在警告中按下“alt-enter,right”并更改检查级别以使警告消失。 该检查位于“JavaScript – >可能的错误”类别中,并被命名为“返回承诺的方法调用的结果被忽略”。

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

例如:

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

或者在ES2017语法中:

 await userController.login(req, res); 

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