【发布时间】:2017-05-07 19:53:18
【问题描述】:
我在 Node.js v7.3 的代码中使用 Express.js。在此我创建了一个User Router,它将请求转发到我的User Controller。
我在 User Controller 中使用 async/await 来执行异步调用。问题是 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});
}
};
如果我只使用本机承诺编写相同的登录方法,那么我不会收到此警告。我在这里理解有什么问题还是 IntelliJ 有问题?
编辑 -
感谢@Stephen,我知道异步函数返回一个承诺,但如果 Intellij 确定异步函数没有返回任何内容并且没有显示该警告,因为当我链接 @987654327 时,这不是更好@ 在 login() 函数之后,它提供了一个 undefined 对象到 then 结果中。这意味着如果我们没有从 async 函数显式返回一些东西,那么 undefined 会被返回?
【问题讨论】:
-
当 promise 解析为
undefined时,IDE 会警告您,您忽略了它在什么时候解析或拒绝的事实。如果您可以将函数标记为“可以安全地忽略 this 的承诺”,那就太好了,这样您就不必在每个调用站点都将其标记为忽略。
标签: javascript node.js intellij-idea async-await es6-promise