我有學習使用Node.js中的回調編程風格的問題令人沮喪。我有一個查詢到MongoDB數據庫。如果我傳遞一個函數來執行它的結果,但我寧願將它平坦化並讓它返回值。任何幫助或方向如何正確地做到這一點表示讚賞。這裏是我的代碼:展開嵌套回調
var getLots = function(response){
db.open(function(err, db){
db.collection('lots', function(err, collection){
collection.find(function(err, cursor){
cursor.toArray(function(err, items){
response(items);
})
})
})
})
}
我想更多的東西是這樣的:
lots = function(){
console.log("Getting lots")
return db.open(openCollection(err, db));
}
openCollection = function(err, db){
console.log("Connected to lots");
return (db.collection('lots',findLots(err, collection))
);
}
findLots = function(err, collection){
console.log("querying 2");
return collection.find(getLots(err, cursor));
}
getLots = function(err, cursor) {
console.log("Getting lots");
return cursor.toArray();
}
當最後一組數據將泡沫備份通過函數調用。
問題是我從Node.js得到一個錯誤,說err沒有被定義,或者這個集合沒有被定義。由於某些原因,當我嵌入回調時,正確的對象正在傳遞。當我嘗試去這個扁平化的風格時,它抱怨事物沒有被定義。我不知道如何讓它通過必要的對象。
有什麼特別不妥你給出的示例解決方案? – 2012-04-20 13:59:49
看起來像一個偉大的想法和良好的實施。有什麼問題? – mellamokb 2012-04-20 14:00:07
你也可以試試這個:https://github.com/caolan/async爲這類問題而創建。 – freakish 2012-04-20 14:03:02