我在NodeJS中有一个函数可以查询Mongo。该功能是" checkForMatchingEmail"。
var result = checkForMatchingEmail(req.body.email);
if ( result === 1) { // something something }
else if ( result === 0) { // something something }
我想使用RESULT变量来决定下一步该做什么。 (向前端发送响应是否在DB中存在此类电子邮件)。
问题是对Mongo的查询似乎有点滞后,所以线程只是跳过它而if / else树没用,因为查询结果还没有。
怎么办?
编辑:
checkForMatchingEmail看起来像这样:
function checkForMatchingEmail(email) {
var result = 0;
User.findOne({email: email}, function(err,obj) {
console.log("email is " + email);
if (err) {
return handleError(err);
} else if (obj != null) {
console.log("This email already exists." + obj);
result = 1;
} else if (obj === null) {
result = 0;
console.log("This email does not exist.");
}
});
return result;
}
答案 0 :(得分:1)
首先,node.js是异步和偶数。在此上下文中没有可以跳过的线程。
当通过mongoose查询mongodb时,您正在使用模型,我们假设User
执行查询。典型的mongoose查询看起来像这样
User.find({ email : 'someone@example.com'}, function(err, user) {
if (err) {
// Do something with the err
}
// Here you have your query result
});
以您的代码示例为例,您应该使用回调参数扩展checkForMatchingEmail
,您可以在其中处理结果
checkForMatchingEmail(req.body.email, function(result) {
if ( result === 1) { // something something }
else if ( result === 0) { // something something }
});
您可以阅读Mixu的Node书中的What is Node.js章节,该书解释了node.js中的异步执行。