在函数内部返回真假,我有点困惑
我有这个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
等于token
variables的条目。
我想要做的是,如果find,返回true,并停止执行其余的app.get('/')...
块。
如果没有find,显然forEach循环已经经历了所有的条目,并最终执行到“not found”的打印并return false;
。
对于我当前的代码,即使find一个条目,执行继续,我仍然得到“未find”日志。
我错过了什么?
为了简化事情,我想要做的是:
- 循环遍历所有授权的用户条目,将entry.id与令牌variables进行比较。
- 如果find,打印“find”到控制台并停止执行。
- 如果找不到,则在控制台上输出“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);