【问题标题】:why mongoose queries dos not work when put inside promise function为什么将猫鼬查询放入promise函数时不起作用
【发布时间】:2017-10-10 03:57:05
【问题描述】:

我的代码如下图:

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 works"),但它不打印 console.log("db test")。那么究竟出了什么问题呢?

【问题讨论】:

  • Mongoose 支持 Promise,您可以直接使用它们,而不是在显式 Promise 对象中嵌入请求和回调:user.findOne({}).then(res => {}).catch(err => {})
  • 谢谢,它帮助了我

标签: node.js mongoose


【解决方案1】:

你忘了保存你的用户,除了 Mongoose 已经返回了 Promise,你不需要使用回调:

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;
    })
};

至于你的功能错误:

...
let user = new User({email_id: email, ph_no: phone});
user.save();//you forgot about this
...

你可以使用 save() 和回调:

user.save((err, result)=>{...});

或承诺:

 user.save().then(result=>{...}).catch(err=>{...});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2020-06-02
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多