请问一个关于回调的例子
发布于 2年前 作者 qiuqiu 791 次浏览

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

回到顶部