2012-09-02 169 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