【问题标题】:Calling a parameterized callback function within a mongoose async callback function becomes 'undefined'在 mongoose 异步回调函数中调用参数化回调函数变为“未定义”
【发布时间】: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


【解决方案1】:

呃,调用函数好像没有按规矩办事。

它叫

myFunc(json, function(err,doc){
    //do something
})

错误的参数计数...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2023-04-04
    • 2017-11-27
    相关资源
    最近更新 更多