我正在学习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);
};
}
是不是内部函数应该可以访问外部函数变量?
感谢。
答案 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
};