我在Node.jsV7.3的代码中使用express.js。在这里,我创建了一个
我正在使用
忽略从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});
}
};
如果只使用本机承诺编写相同的登录方法,则不会收到此警告。是我理解错了还是IntelliJ错了?
编辑-
感谢@stephen,我理解了异步函数返回一个承诺,但如果Intellij识别出异步函数没有返回任何东西,并且不显示警告,这不是更好吗,因为当我将
问题是,我甚至没有从login()方法返回任何东西。
声明为“async”的函数根据定义返回一个承诺。例如,请参见https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/async_function
然而,观念警示只是一种检查。您可以在警告上按“Alt-Enter,Right”,并更改检查级别以使警告消失。该检查属于“JavaScript-&>可能的错误”类别,名为“方法调用返回承诺的结果被忽略”(result of method call returning a promise is ignored)。
例如:
userController.login(req, res).then(() => {
// Do something after login is successful.
});
或者在ES2017语法中:
await userController.login(req, res);
如果你实际上不想在那里做任何事情,我猜你可以忽略警告。之所以出现警告,主要是因为没有在promise上使用
如果您真的像我一样狂躁,并且不需要
functionWithAsync.error(console.error);