当放在promise函数中时,为什么猫鼬查询不起作用 [英] why mongoose queries dos not work when put inside promise function
本文介绍了当放在promise函数中时,为什么猫鼬查询不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的代码如下所示:
checkAndCreateUser(customer_id, email_id).then(result => {
console.log("result is " + result);
});
var checkAndCreateUser = function (custom_id, email) {
return new Promise(function (resolve, reject) {
if ((!custom_id) && (custom_id.trim() == '')) {
var creatUser = new user();
// creatUser._id = user_id;
creatUser.ph_no = ph_no;
creatUser.email_id = email;
console.log("fn works");
user.findOne({
'email_id': email
}, function (err, user) {
console.log("db test");
if (!user) {
creatUser.save(function (err, userInfo) {
if (err) {
reject("no id found");
} else {
customer_id = userInfo._id;
resolve(customer_id);
}
});
} else {
customer_id = user._id;
resolve(customer_id);
}
});
}
});
}
现在,这里发生的是我无法成功运行数据库查询.我可以打印 console.log("fn可以正常工作"),但不能打印 console.log("db测试").那么到底出了什么问题?
Now what happens here is I am not able to successfully run db query. I am able to get console.log("fn works") printed , but it does not print console.log("db test"). So what exactly is going wrong?
推荐答案
您忘了保存用户,除了Mongoose已经返回的promise外,您不需要使用回调:
You forgot save your user, besides Mongoose already returned promise, you don't need use callbacks:
var checkAndCreateUser = function (custom_id, email) {
return User.create({ ph_no :ph_no,
email_id :email})
.then(result=>{
return User.findOne({'email_id': email})
})
.then(user=>{
return user._id;
})
};
关于您的函数中的错误:
As for mistake in your function:
...
let user = new User({email_id: email, ph_no: phone});
user.save();//you forgot about this
...
您可以将save()与回调一起使用:
You can use save() with callback:
user.save((err, result)=>{...});
或承诺:
user.save().then(result=>{...}).catch(err=>{...});
这篇关于当放在promise函数中时,为什么猫鼬查询不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文