【发布时间】:2015-09-19 10:11:14
【问题描述】:
我在从 mongoose 调用另一个回调中的回调时遇到了一个奇怪的问题。 设置:平均堆栈。
myFunc = function (cb) {
var projection = {
'_id': 0,
'var1': 1,
'var2': 1
}
var order = {
'var1': 1
}
User.find({})
.select(projection).sort(order)
.exec(function(err, docs){
if(err){
console.log(err);
cb(err,docs);
} else {
console.log(docs);
cb(err,docs);
}
});
};
转到 cb(err,docs) 将导致的行 "ReferenceError: cb 未定义"
奇怪的是 我有更深层次的嵌套回调函数,可以正常调用“cb”。
myFunc = function(cb){
model1.count({var1:'test'}, function (err, count) {
if(count) {
model2.findOne({dat1:'hoho'}, function (err, doc){
if (err) {
console.error(err);
cb(err,doc);
} else {
cb(err,doc);
}
});
} else {
cb({message: "No items found"}, null);
}
})
}
上面的代码会被这样调用...
function init(something){
myfunc(function(err, doc) {
if (err){
console.log(err.message);
} else {
//do something about doc
}
});
}
【问题讨论】:
-
那么,cb 函数在哪里?这就是为什么它说 cb 没有定义。
-
cb 函数将被另一个对象或脚本调用。例如 function init(something){ myfunc(function(err, doc) { if (err){ console.log(err.message); } else { //do something about doc } }); } *请查看问题的变化
-
*我的意思是... cb 是方法调用传递的匿名函数。 (请参阅调用 myFunc() 的问题的最后一部分)
标签: javascript mongodb callback mongoose scope