2012-09-02 134 views
0

我在写一个函数,它返回一个包含在Mongo数据库中注册的所有用户的列表。从一个Mongoose返回父函数的结果匿名函数

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

的问题是,猫鼬需要一个匿名函数来获得满意的结果,如果我试图返回这些结果时,我有它,返回只会影响到匿名函数,所以父函数返回undefined。我想Mongoose异步运行匿名函数。

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

谢谢。

+0

我读过一些关于承诺,但我不知道如何在我的代码中实现它。 – Miguel

回答

2

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

最直接的方式,使这项工作是通过传递回调,并使用回调回调find使异步:

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

,然后用它是这样的:

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

谢谢!我没想过把匿名函数放在另一边。 – Miguel