我在下面提到的函数中使用了两个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"});
});
}
答案 0 :(得分:3)
Array#forEach
迭代数组的所有元素,它不尊重任何返回值。
要使用短路,您可以使用Array#some
并返回true
来停止迭代或Array#every
,此处您需要返回一个truthy值以继续循环。
通过使用嵌套方法,您需要将返回值冒泡到外部数组循环。
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);
答案 1 :(得分:0)
因为返回内部匿名函数;为以下用户(外部foreach)再次调用相同的函数