Pregunta

Estoy usando ahora.js y mangosta en un proyecto de nodo y tengo problemas para acceder a esto. Ahora objeto dentro de una función de mangosta. P.ej

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"
    };
  });
};
¿Fue útil?

Solución

Cambie el código a esto:

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
    };
  });
};

Dentro de su función interior, la this Probablemente se esté estableciendo en otra cosa. Por lo tanto, para preservar el valor al que desea acceder, lo asigna a una variable local diferente que estará disponible en la función interna.

Otros consejos

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`
};

Usar Function.prototype.bind para establecer el valor de this al valor que desee

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top