JavaScript (node.js) 变量在内部函数调用时无法访问。now.js
-
22-10-2019 - |
题
我在节点项目中使用 now.js 和 Mongoose,并且在访问 mongoose 函数内的 this.now 对象时遇到问题。例如。
everyone.now.joinDoc = function (project_id){
this.now.talk(); //this will work
Project.findOne({'_id':project_id}, function(err, project){
if(project){
this.now.talk(); // this will not work "TypeError: Cannot call method 'bark' of undefined"
};
});
};
解决方案
将代码更改为:
everyone.now.joinDoc = function (project_id){
this.now.talk(); // this will work
var that = this; // save 'this' to something else so it will be available when 'this' has been changed
Project.findOne({'_id':project_id}, function(err, project){
if(project){
that.now.talk(); // use local variable 'that' which hasn't been changed
};
});
};
在你的内部函数中, this
可能被设置为其他内容。因此,为了保留您想要访问的值,您可以将其分配给内部函数中可用的不同局部变量。
其他提示
everyone.now.joinDoc = function (project_id){
this.now.talk(); // this will work
Project.findOne({'_id':project_id}, (function(tunnel, err, project){
if(project){
this.now.talk();
};
}).bind(this, "tunnel")); // overwrite `this` in callback to refer to correct `this`
};
利用 Function.prototype.bind
设置价值 this
对于您想要的价值
不隶属于 StackOverflow