2015-07-02 58 views
0

我在調用貓鼬的另一個回調中的回調時出現了一個奇怪的問題。 設置:MEAN堆棧。在貓鼬異步回調函數中調用參數化回調函數變得'undefined'

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,文檔)將導致 「的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 
     } 
    }); 
} 
+0

因此,哪來的CB功能?這就是爲什麼它說cb沒有定義。 –

+0

cb函數將被另一個對象或腳本調用。例子是 功能的init(東西){ MYFUNC(函數(ERR,DOC){ 如果(ERR){ 的console.log(err.message);} 其他{// 做一些文檔 } }); } *請參閱有關 –

+0

問題的更改*我的意思是... cb是由方法調用傳遞的匿名函數。 (參見調用myFunc()的問題的最後部分) –

回答

0

唉,好像是調用函數沒有正確地遵守規則。

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

錯PARAM個性化......