我在嵌套函数中使用变量,并在将值传递给父函数后,但在调用它时没有显示任何内容。
function userexists(key) {
let user = false;
UsersModel.findOne({ email: key }, function (error, foundUser) {
if (!error && foundUser) user = foundUser;
else {
console.log("error or not found: " + error);
}
});
return user;
}
这样做的原因是findOne似乎是一个异步函数。因此user
总是false
。确保async await
或在函数本身中添加回调函数。
示例async await,如果可能:
async function abc(key) {
const response = await UsersModel.findOne({ email: key });
if (response.error)
return false;
}
return response.foundUser;
}
回调函数示例:
function async abc(key, f) {
UsersModel.findOne({ email: key }, (error, foundUser) => {
if (!error) f();
});
}
感谢FloWy和VLAZ
,
function userexists(key) {
let user = false;
UsersModel.findOne({ email: key }, function (error, foundUser) {
if (!error && foundUser) user = foundUser;
else {
console.log("error or not found: " + error);
}
});
return user;
}
在函数内部使用回调,
function userexists(key, callback) {
UsersModel.findOne({ email: key }, function (error, foundUser) {
if (!error && foundUser) return callback(foundUser);
else return callback(false);
});
}
,
userexists(username, function (user) {
// you can use user here
});