请问一个关于回调的例子
请问一个好像应该要嵌套的回调怎么用。。。 我定义的User
function User(user) {
this.name = user.name;
this.password = user.password;
this.type = user.type;
this.parentname = user.parentname ;
};
type是P的表示父节点,C是子节点 现在写一个子节点(C)的查询 参数:子节点的名字,父节点的名字 如果父节点不存在,直接返回错误,如果父节点存在再查子节点 现在的情况是如果父节点存在查子节点的时候,好像没有返回到最外层。。。 我也不知道我说清楚没有。。。
User.getCC = function get(childname,parentname, callback) {
mongodb.open(function(err, db) {
if (err) {
return callback(err);
}
//获取users集合
db.collection('users', function(err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
//查找name属性为parentname类型为P的文档
collection.findOne({name: parentname,type : 'P'}, function(err, doc) {
mongodb.close();
if (!doc) {
mongodb.close();
err="父节点不存在";
callback(err, null);
}
console.log(doc);
collection.findOne({name: childname,type : 'C'}, function(err, doc) {
mongodb.close();
if (doc) {
//封装文档为User对象
console.log(doc);
var user = new User(doc);
mongodb.close();
callback(err, user);
} else {
mongodb.close();
callback(err, null);
}
});
});
});
});
};
请大家指点一下。。。
4 回复
如果是return to caller, 那些callback加个return看看:
if (!doc) {
mongodb.close();
err="父节点不存在";
return callback(err, null); // 这?
}
也加了,好像是一样的啊
@qiuqiu 可能是你要先 if (err) 而不是 if (doc) ? 当然我不熟悉mongdb, 不知道在什么情形下有err, 参考而已
@venngomez 呵呵。。。这个好像不是回调的事。。。我应该把下面那个查询拿出来就好了。。。