我在学习使用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未定义或者collection未定义。由于某种原因,当我嵌套回调时,正确的对象会被传递下去。但是,当我尝试使用这种扁平化的风格时,它会抱怨一些东西未定义。我不知道如何让它传递必要的对象。