在函数内部返回真假,我有点困惑

我有这个function,例如:

app.get('/', function(req, res) { var token = req.query.token; if(!token) { res.render('auth'); // Authentication } else { authorizedUsers.forEach(function(user) { if(user.id == token) { console.log('found, nickname: ' + user.nickname); return true; } }); console.log('not found'); return false; } }); 

基本上它是遍历的authorizedUsers数组,并寻找entry.id等于tokenvariables的条目。

我想要做的是,如果find,返回true,并停止执行其余的app.get('/')...块。

如果没有find,显然forEach循环已经经历了所有的条目,并最终执行到“not found”的打印并return false;

对于我当前的代码,即使find一个条目,执行继续,我仍然得到“未find”日志。 在这里输入图像说明

我错过了什么?

为了简化事情,我想要做的是:

  1. 循环遍历所有授权的用户条目,将entry.id与令牌variables进行比较。
  2. 如果find,打印“find”到控制台并停止执行。
  3. 如果找不到,则在控制台上输出“not found”并停止执行。

谢谢。

编辑

迈克尔的解决scheme,这是我的工作代码:

 app.get('/', function(req, res) { var token = req.query.token; if(!token) { res.render('auth'); // Authentication } else { if(!authorizedUsers.some(function(user) { if(user.id == token) return true; })) { console.log('No entries found.'); } else { console.log('Entries found!'); } } }); 

你可以使用Array.prototype.some这件事情:

 authorizedUsers.some(function(user) { return user.id == token; } 

some()方法testing数组中的某个元素是否通过了由提供的函数实现的testing。

除非内部代码引发exception,否则forEach函数不能被中断。

所以你可以做这样的事情

或者让它贯穿所有的logging,像这样做:

  var found = false; authorizedUsers.forEach(function(user) { if(user.id == token) found = true; }); console.log('found? ', found);