Mongoose回调函数错误

时间:2017-03-12 17:12:18

标签: javascript node.js mongodb express mongoose

我正在学习nodejs,express和mongoose。我想出了一个关于用于从数据库中检索文档的findOne函数的问题。 通常,你会像这样使用它:

 Product.findOne({_id: req.params.id},function(error, result){
      res.send(result);
});

但是当我尝试做以下事情时,它失败了(我只是为了学习而这样做):

 Product.findOne({_id: req.params.id}, returnFunction(res));

 function returnFunction(res,error, result){ 
     //error and result  are provided by the findOne callback function
     return function(){
           res.send(result); //doesnt work
      };
  }

但是如果我将参数传递给内部函数,它就可以完美地运行:

Product.findOne({_id: req.params.id}, returnFunction(res));

 function returnFunction(res,error, result){ 
       //error and result  are provided by the findOne callback function
       return function(res,result){
             res.send(result); 
       };
 }

是不是内部函数应该可以访问外部函数变量?

感谢。

1 个答案:

答案 0 :(得分:1)

当您致电public class ExampleActivity extends Activity // Presenter implements OtherClass.OnTextChangeListener { private EditText editText @Override void onTextChanged(String text) { editText.setText(text); // Present the data } @Override public void onCreate(Bundle b) { // Other code... // Bind the Presenter to the View OtherClass x = new OtherClass(); x.listener = this; // 'this' being the *interface*, not the Activity } } 时,您实际上正在返回一个功能。

如果您将功能定义为:

returnFunction(res)

你正在返回一个不带参数的函数。这相当于

function returnFunction(res, error, result){ 
     return function(){
           res.send(result);
      };
  }

但是如果你定义你的功能:

 Product.findOne({_id: req.params.id}, function(){
      res.send(result);  // result is undefined here
});
好的,没关系。这相当于:

function returnFunction(res){ 
       return function(error, result){
             res.send(result); // res is defined
       };