【发布时间】:2012-05-02 03:01:03
【问题描述】:
在学习使用 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 或未定义集合。出于某种原因,当我嵌套回调时,正确的对象被传递下来。当我尝试采用这种扁平化风格时,它抱怨事情没有定义。我不知道如何让它传递必要的对象。
【问题讨论】:
-
您给出的示例解决方案有什么特别问题?
-
看起来是一个很棒的想法和一个很好的实现。有什么问题?
-
你也可以试试这个:github.com/caolan/async为这类问题而生。
-
问题是我从 Node.js 收到一个错误,说未定义错误或未定义集合。出于某种原因,当我嵌套回调时,正确的对象被传递下来。当我尝试采用这种扁平化风格时,它抱怨事情没有定义。我不知道如何让它传递必要的对象。我已将此评论添加到此问题。很抱歉模棱两可。
标签: javascript node.js mongodb callback