在函数内部返回true或false,我有点困惑

时间:2016-02-16 00:56:22

标签: javascript node.js syntax scope return

我有这个功能,例如:

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变量的条目。

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

如果没有找到,显然forEach循环已经遍历了所有条目,并且最终执行到达"未找到"和return false;

对于我当前的代码,即使找到了一个条目,执行仍然继续,我仍然得到“未找到”#39;登录。 enter image description here

我错过了什么吗?

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

  1. 循环访问所有authorizedUsers条目,将entry.id与令牌变量进行比较。
  2. 如果找到,请打印"找到"到控制台并停止执行。
  3. 如果找不到,请打印"未找到"到控制台并停止 执行。
  4. 谢谢。

    修改

    按照迈克尔的解决方案,这是我的工作代码:

    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!');
            }
        }
    });
    

2 个答案:

答案 0 :(得分:4)

您可以使用Array.prototype.some

let retry = SKSpriteNode(imageNamed: "button_retry_up")
retry.name = StickHeroGameSceneChildName.RetryButtonName.rawValue
retry.position = CGPointMake(0, -180)
node.addChild(retry)

let newButton = SKSpriteNode(imageNamed: "button_games_up")
newButton.name = StickHeroGameSceneChildName.GamesButtonName.rawValue
newButton.position = CGPointMake(0, -360)
node.addChild(newButton)
  

authorizedUsers.some(function(user) { return user.id == token; } 方法测试数组中的某个元素是否通过了由提供的函数实现的测试。

答案 1 :(得分:0)

除非内部代码抛出异常,否则forEach函数不会被中断。

所以你可以做this

之类的事情

或者让它运行所有记录,执行以下操作:

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