javascript - 为什么这段代码不会破坏嵌套的 forEach

标签 javascript node.js loops

我在下面提到的函数中使用了两个 return 语句。但仍然是所有用户的函数循环。

module.exports.getByKey = function(key, callback) {
    User.find().populate('licences').exec(function(err, users) {
        if(err) {
            return callback(err);
        }
        var keyFound = false;
        users.forEach(function(user) {
            console.log("user found " + user.name);
            user.licences.forEach(function(licence) {
                console.log("licence found");
                if(licence.key == key) {
                    keyFound = true;
                    callback(null, user);
                    return;
                }
            }, this);
            if(keyFound) {
                console.log("+++++++++++++++++++++++");
                return;
            }
        }, this);
        // return callback({error: "Invalid Key"});
    });
}

最佳答案

Array#forEach迭代数组的所有元素,它不考虑任何返回值。

要使用短路,您可以使用 Array#some并返回 true 以停止迭代或 Array#every ,这里需要返回一个真值来继续循环。

通过使用嵌套方法,您需要将返回值冒泡到外部数组循环。

var keyFound = users.some(function(user) {            // return some
        return user.licences.some(function(licence) { // return some
            if (licence.key == key) {
                callback(null, user);
                return true;
            }
        }, this);
    }, this);

关于javascript - 为什么这段代码不会破坏嵌套的 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46373392/

相关文章:

javascript - 自定义javascript提示和确认框

c - 如何在链表中存储路由

javascript - 如何获取特定 Discord 角色的名称?

javascript - firefox 扩展 - 检测按钮是否按下 shift

javascript - 替换测试中的特定模块

javascript - 我的 Regex 比我的 forEach 更有效吗?

javascript - 带有参数的 Typeorm 监听器

javascript - node.js 中的 Node 到底是什么?

python - 在循环中使用不同的名称保存数组

python - 嵌套循环问题___>