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()
函数,通常是代码味道。