JavaScript (node.js) Variable, die beim inneren Funktionsaufruf nicht zugänglich sind. jetzt.js
-
22-10-2019 - |
Frage
Ich benutze jetzt.Js und Mongoose in einem Knotenprojekt und habe Probleme beim Zugriff auf das This. -jetzt -Objekt innerhalb einer Mongoose -Funktion. Z.B
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"
};
});
};
Lösung
Ändern Sie den Code darauf:
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
};
});
};
In Ihrer inneren Funktion die this
wird wahrscheinlich auf etwas anderes eingestellt. Um den Wert zu erhalten, auf den Sie zugreifen möchten, weisen Sie ihn einer anderen lokalen Variablen zu, die in der inneren Funktion verfügbar ist.
Andere Tipps
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`
};
Verwenden Function.prototype.bind
den Wert von festlegen this
zu dem Wert, den Sie wollen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow