JavaScript (node.js) variabile non accessibili su chiamata funzione interna. now.js
-
22-10-2019 - |
Domanda
Sto usando now.js e Mongoose in un progetto nodo e ho problemi accedere all'interno oggetto this.now di una funzione mangusta. Per es.
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"
};
});
};
Soluzione
Modificare il codice a questo:
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
};
});
};
All'interno della vostra funzione interna, il this
viene probabilmente impostato su qualcos'altro. Quindi, per preservare il valore che si desidera accedere, si assegna a un diverso variabile locale che sarà disponibile nella funzione interna.
Altri suggerimenti
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`
};
Usa Function.prototype.bind
per impostare il valore della this
al valore che si desidera
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow