当放在promise函数中时,为什么猫鼬查询不起作用 [英] why mongoose queries dos not work when put inside promise function

查看:81
本文介绍了当放在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆