返回false是否可以通过异步函数传递ESLint一致返回错误?

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)

请告知哪个是正确的方法.谢谢.

Den*_*ret 6

这里的规则指出了一个真正的一致性问题:有时你似乎会返回一个值,有时你却没有.它只能起作用,因为忽略了返回的值.您的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)

  • 此链接 - http://eslint.org/docs/rules/callback-return显示使用返回回调(错误)而不是回调(错误).另外,如果我使用`next(错误); return;`ESLint在某些情况下显示无用返回.如果我删除`return;`然后它会抛出一致返回错误. (2认同)