Moh*_*waj 1 javascript asynchronous node.js express eslint
我正在使用ExpressJS,需要在我的代码上运行和传递ESLint规则.有一个规则"一致 - 返回",这是为这样的代码抛出:
function getUsers( req, res, next ){
if( req.userIds.length === 0 ){
return next();
}
collection.find({"_id": {$in: req.userIds}}, function( err, doc ){
if( err ){
return next();
}
req.users = doc;
return next();
});//find()
}//getUsers()
Run Code Online (Sandbox Code Playgroud)
现在,此代码给出了"一致返回"错误.似乎有2个可能的更改,删除此错误,我不确定这些是正确的.
function getUsers( req, res, next ){
if( req.userIds.length === 0 ){
return next();
}
collection.find({"_id": {$in: req.userIds}}, function( err, doc ){
if( err ){
return next();
}
req.users = doc;
return next();
});//find()
return false; // adding return false passes the ESLint error
}//getUsers()
Run Code Online (Sandbox Code Playgroud)
要么
function getUsers( req, res, next ){
if( req.userIds.length === 0 ){
return next();
}
// adding return in below line passes the ESLint error.
return collection.find({"_id": {$in: req.userIds}}, function( err, doc ){
if( err ){
return next();
}
req.users = doc;
return next();
});//find()
}//getUsers()
Run Code Online (Sandbox Code Playgroud)
请告知哪个是正确的方法.谢谢.
这里的规则指出了一个真正的一致性问题:有时你似乎会返回一个值,有时你却没有.它只能起作用,因为忽略了返回的值.您的return陈述的唯一要点是分支执行函数的其余部分.
您的代码具有误导性,并且会损害可读性.
更换
if( err ){
return next();
}
Run Code Online (Sandbox Code Playgroud)
同
if( err ){
next();
return;
}
Run Code Online (Sandbox Code Playgroud)
整个没有混乱的代码:
function getUsers( req, res, next ){
if( req.userIds.length === 0 ){
next();
return
}
collection.find({"_id": {$in: req.userIds}}, function( err, doc ){
if( !err ){
req.users = doc;
}
next();
});//find()
}//getUsers()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |