编程语言
首页 > 编程语言> > javascript – Intellij Idea警告 – 使用aysnc / await忽略“返回的Promise”

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

作者:互联网

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

我在用户控制器内部使用async / await来进行异步调用.问题是IntelliJ给了我一个警告说

Promise returned from login() is ignored.

问题是我甚至没有从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,我知道async函数会返回一个promise,但如果Intellij发现没有从async函数返回任何内容并且没有显示该警告,那就不会更好了,因为当我链接一个.then()之后login()函数,它在then结果中提供一个未定义的对象.这意味着如果我们不显式地从异步函数返回一些东西,那么返回undefined?

解决方法:

The thing is I’m not even returning anything from the login() method.

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

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

标签:javascript,node-js,intellij-idea,async-await,es6-promise
来源: https://codeday.me/bug/20191005/1856254.html