从此回调中获取价值

时间:2016-09-07 17:24:20

标签: javascript node.js mongodb express

我是node和mongodb的新手,所以我不知道如何获取这些数据。我总是得到未定义,我已经读过,因为它是异步的,我知道是重复的,但我无法弄明白。

我已经创建了一个控制台记录结果的函数,但我无法在此函数中设置var,只需控制台记录该值。

这是与数据库建立连接的功能

var findUser = function (mail) {
MongoClient.connect(url, function (err, db) {
    if(err) {
        console.log('ha habido un problema al conectar', err);
    } else {
        console.log('connected');
        var collection = db.collection('users')
            .find({email : mail}).toArray(function (err, result) {
            if (err) {
                finded(err);
            } else if(result.length) {
                finded(result);
            } else {
                finded(false);
            }
            db.close;
        });
    }
});

};

这是接收数据的那个

var finded = function(findedUser){console.log(findedUser)};

但我希望将数据放在变量中,这样我就可以读出类似

的内容
var finded = function(findedUser){user = findedUser};

其中user是全局变量,因此我可以使用类似if(user.lenght)

的内容

更新

我讨厌当我找到一个问题并且没有最终答案时,所以我最终做的是创建一个承诺并将其全部包含在内,如下所示:

function findUserPromise(mail) {
    return new Promise(function(resolve, reject) {
        MongoClient.connect(url, function (err, db) {
            if(err) {
                console.log('ha habido un problema al conectar', err);
            } else {
                var collection = db.collection('users')
                    .find({email : mail}).toArray(function (err, result) {
                        if (err) {
                            resolve(err);
                        } else if(result.length) {
                            resolve(result);
                        } else {
                            resolve(false);
                        }
                        db.close;
                    });
            }
        });
    });
};

,用法是

findUserPromise(username).then(function(result) {
    if (result == false) {
        console.log('not finded');
    } else {
        var decryptPass = decrypt(result[0].password);
        if (decryptPass == password) {
            done(null, { username: result[0].email, name: result[0].name });
        } else {
            done(null, null);
        }
    }
}).catch(function(err) {
    err;
});

0 个答案:

没有答案