Jyo*_*ngh 46 javascript intellij-idea node.js async-await es6-promise
我在我的代码中使用Express.js和Node.js v7.3.在这里我创建了一个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
});
Run Code Online (Sandbox Code Playgroud)
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});
}
};
Run Code Online (Sandbox Code Playgroud)
如果我只使用本机承诺编写相同的登录方法,那么我不会收到此警告.我在这里理解错误或者IntelliJ有错吗?
编辑 -
感谢@Stephen,我知道async函数会返回一个promise,但如果Intellij发现没有从async函数返回任何内容并且没有显示该警告,那就不会更好了,因为当我.then()在login()函数之后链接a时,它undefined在then结果中提供一个对象.这意味着如果我们不显式地从异步函数返回一些东西,那么返回undefined?
Ste*_*ich 38
问题是我甚至没有从login()方法返回任何东西.
声明为"async"的函数按定义返回Promise.请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
然而,IDEA警告只是一次检查.您可以在警告上按"alt-enter,right"并更改检查级别以使警告消失.检查位于"JavaScript - >可能的错误"类别中,并命名为"返回承诺的方法调用结果被忽略".
Rob*_*bba 33
该userController.login()函数返回一个promise,但是你没有通过利用它的then()函数对promise的结果做任何事情.
例如:
userController.login(req, res).then(() => {
// Do something after login is successful.
});
Run Code Online (Sandbox Code Playgroud)
或者在ES2017语法中:
await userController.login(req, res);
Run Code Online (Sandbox Code Playgroud)
如果你真的不想在那里做任何事情,我想你可以忽略警告.警告主要是因为没有then()在承诺上使用函数通常是代码气味.
小智 20
router.post('/login', function (req, res, next) {
void userController.login(req, res); // I get the warning here
});Run Code Online (Sandbox Code Playgroud)
您应该使用“void”运算符。
如果您只是想关闭任何 JetBrains 产品的此警告。去
Preferences > Inspections > JavaScript and TypeScript | Async code and promises | Result of method call returning a promise is ignored并关闭设置。
如果您真的像我一样狂躁,并且then()不是必需的,但是您需要警告来消除,那么可能的解决方案是:
functionWithAsync.error(console.error);
Run Code Online (Sandbox Code Playgroud)
摆脱警告的另一种方法是定义一个空then():
userController.login(req, res); // <- Get the warning here
userController.login(req, res).then(); // <- No warning
我try{} catch(e){}在 NodeJs 中使用,发现只需添加Error()到函数的末尾修复警告。
完整代码:-
someArray.forEach(async (arrayValue) => {
try {
const prodData = await myAsyncFunc(arrayValue);
} catch(e) {
console.error(`Error: ${e}`);
}
}, Error());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33029 次 |
| 最近记录: |