我在下面提到的函数中使用了两个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);