我在Node.js v7.3的代码中使用了Express.js。在这里,我创建了一个用户路由器
,它将请求转发给我的用户控制器
。
我在用户控制器中使用async/await执行异步调用。问题是IntelliJ给了我一个警告说
忽略从login()返回的promise。
问题是我甚至没有从
log()
方法返回任何东西。
这是代码-
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});
}
};
如果我只使用本机promise编写相同的登录方法,则不会收到此警告。我是理解错了还是IntelliJ错了?
编辑-
感谢@Stephen,我知道异步函数会返回一个promise,但如果Intellij识别出异步函数没有返回任何东西,并且没有显示该警告,那不是更好吗?因为当我在
login()
函数之后链接.then()
,它向then结果中提供了一个未定义的
对象。这意味着,如果我们不显式地从异步函数返回某些内容,那么将返回undefined?
router.post('/login', function (req, res, next) {
void userController.login(req, res); // I get the warning here
});
问题是我甚至没有从login()方法返回任何东西。
声明为“async”的函数根据定义返回promise。例如,见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
然而,这种想法只是一种检查。您可以按警告上的“alt-enter,right”,并更改检查级别以消除警告。检查在“JavaScript”中-
userController.login()
函数返回一个promise,但是通过使用它的then()
函数,您不会对promise的结果做任何事情。
例如:
userController.login(req, res).then(() => {
// Do something after login is successful.
});
或在ES2017语法中:
await userController.login(req, res);
如果你真的不想在那里做任何事情,我想你可以忽略这个警告。警告主要是因为在promise上不使用then()
函数通常是一种代码味道。
忽略编译器警告 格式 #pragma clang push #pragma clang diagnostic ignored "错误类型" // 存在警告的代码 #pragma clang pop > 1.在需要忽略的警告处右键 -- Reveal in Log 2.会给出警告的详细信息,其中包括警告的类型 3.高亮选中的便是这个警告的类型 4.在警告代码处增加如下代码 Command
必须将promise的回调定义为异步,这似乎有内在的问题: 这显然是一种反模式,因此可能会出现编码问题。我知道,即使在/块中放置语句,也很容易在此处捕获错误。 我的第一个问题是,当一个人想要用不同的resolve/reject值转发一个promise时,编写这样的代码的最佳方式是什么?那么,你要什么?即。 或者你只是按照这里的建议把它全部去掉? 但是,您如何解释这样的代码呢? 我觉得我把事情弄得比
问题内容: 我有一个统计问题的功能: 有时我会从外壳中收到以下警告: 我使用numpy函数更正其他文件中的函数结果,因此不需要此警告。 有没有办法忽略该消息?换句话说,我不希望外壳程序打印此消息。 我不想禁用所有python警告,仅禁用这一警告。 问题答案: 您可以使用禁用警告。将其放在可能的除以零之前: 这将全局禁用零除警告。如果只想禁用它们一点,可以在子句中使用: 对于零除零除法(不确定,导致
同时将warning的值设置为“all”或,没有任何结果。 checkstyle的文档很差。一些想法?
告警策略即针对监控指标设置阈值,当资源的指标超过阈值时,将会立即通过通知渠道向用户发送告警消息,使用户可以快速响应解决问题。 告警策略即针对监控指标设置阈值,当资源的指标超过阈值时,将会立即通过通知渠道向用户发送告警消息,使用户可以快速响应解决问题。 目前系统内置以下默认策略: process.zombies:检测节点上僵尸进程大于10时告警。 process.total:检测节点上进程数大于20
问题内容: 使用PMD,如果要忽略特定的警告,则可以使该行被忽略。 FindBugs有类似的东西吗? 问题答案: FindBugs的初始方法涉及XML配置文件(也称为过滤器)。这确实不如PMD解决方案方便,但是FindBugs只能在字节码上工作,而不能在源代码上工作,因此注释显然不是一个选择。例: 但是,为解决此问题,FindBugs稍后引入了另一个基于注释的解决方案(请参阅参考资料),您可以在类