在学习使用 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 或未定义集合。出于某种原因,当我嵌套回调时,正确的对象被传递下来。当我尝试采用这种扁平化风格时,它抱怨事情没有定义。我不知道如何让它传递必要的对象。