请问一个关于回调的例子
发布于 12 年前 作者 qiuqiu 3732 次浏览 最后一次编辑是 8 年前

请问一个好像应该要嵌套的回调怎么用。。。 我定义的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 呵呵。。。这个好像不是回调的事。。。我应该把下面那个查询拿出来就好了。。。

回到顶部