Javascript 为什么变量显示为未定义?
我在一个朋友请求数组中查询一个用户,该数组可以工作,但是我使用userAdd进行的检查显示为未定义。有人知道为什么它显示为未定义的吗 代码如下:Javascript 为什么变量显示为未定义?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在一个朋友请求数组中查询一个用户,该数组可以工作,但是我使用userAdd进行的检查显示为未定义。有人知道为什么它显示为未定义的吗 代码如下: exports.searchPost = function(req, res, err) { User.find({$or:[ {firstName: req.body.firstName}, {lastName: req.body.lastName}, {emai
exports.searchPost = function(req, res, err) {
User.find({$or:[
{firstName: req.body.firstName},
{lastName: req.body.lastName},
{email: req.body.email},
{phone: req.body.phone}]
}, function(err, users) {
if(err) {
return res.render('searchError', {title: 'Weblio'});
} else {
if(req.body.firstName=== '' && req.body.lastName==='' && req.body.email==='' && req.body.phone=== '') {
//maybe a diff page saying that is not a valid search page
return res.render('searchError', {title: 'Weblio'});
} else {
var userAdd;
console.log('addman');
users.forEach(function(user) {
User.findById(req.signedCookies.userid,
{friendRequest: user._id}, function() {
if(user._id === true ) {
console.log('addman1');
return userAdd = true;
} else {
console.log('addman2');
return userAdd = false;
console.log(user._id);
}
})
});
console.log(userAdd);
return res.render('searchResults', {title: 'Weblio',
usersFound: users,
userAdded: userAdd
});
}
}
});
};
它是异步的,因此您需要使用回调方式来链接操作。您可以尝试一些节点模块,如或,以更好的语法实现它 顺便说一句,我认为您不需要遍历
users.forEach(function(user)
)
如果使用Step,则可以执行以下操作:
exports.searchPost = function(req, res, err) {
User.find({$or:[
{firstName: req.body.firstName},
{lastName: req.body.lastName},
{email: req.body.email},
{phone: req.body.phone}]
}, function(err, users) {
if(err) {
return res.render('searchError', {title: 'Weblio'});
} else {
if(req.body.firstName=== '' && req.body.lastName==='' && req.body.email==='' && req.body.phone=== '') {
//maybe a diff page saying that is not a valid search page
return res.render('searchError', {title: 'Weblio'});
} else {
var userAdd;
console.log('addman');
Step(
function(){
User.findById(req.signedCookies.userid, {friendRequest: user._id}, this);
},
function(err, user){
if(user !== null && user._id === true ) {
console.log('addman1');
userAdd = true;
} else {
console.log('addman2');
userAdd = false;
console.log(user._id);
}
return res.render('searchResults', {title: 'Weblio',
usersFound: users,
userAdded: userAdd
});
}
);
}
}
});
};
欢迎来到奇妙的异步世界!你需要在回调中。相关吗?还有,你有一个错误的
x
,你的选项卡很糟糕。是的,很抱歉,这实际上是一段更大的代码的片段,x在那里是偶然的,因为我从文件中删除了注释,对不起…我更新了代码以包含我不在回调中吗?我在users.foreach中的函数中。我如何实现异步?如果不是,那么我仍然无法使用上面所写的内容将userAdd设置为未定义。是的,我查看了异步,老实说,我在这里很难理解如何使用它。它是说user.\u id对于第二个函数是未定义的激动