从Mongoose结果匿名函数返回父函数

时间:2012-09-02 18:54:17

标签: javascript node.js mongoose

我正在编写一个函数,该函数返回一个列表,其中包含在Mongo数据库中注册的所有用户。

function getUsers() {
    db.collection('users').find({}, {username: true}, function(error, results) {
        if (results) return results;
        return [];
    });
}

问题是Mongoose需要一个匿名函数来获取结果,如果我尝试返回那些结果,则只返回对匿名函数的影响,因此父函数返回undefined。我想Mongoose是异步运行匿名函数的。

解决这个问题的最佳方法是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

你是对的;从异步函数返回没有任何意义。您需要异步处理数据库操作的结果。 (你可以使用promises,正如Kamugo所提到的,但即使是promises也使用回调函数)。

使这项工作最直接的方法是通过传递回调使getUsers异步,并使用该回调来回调find

function getUsers(callback) {
    db.collection('users').find({}, {username: true}, callback);
}

然后像这样使用它:

getUsers(function(error, results) {
    if (results) {
        // do something with results
    } else {
        // no results
    }
});