JavaScript (node.js) variable no accesible en la llamada de función interna. ahora.js
-
22-10-2019 - |
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"
};
});
};
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