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