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"
    };
  });
};
War es hilfreich?

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
scroll top