NodeJs

2016-03-23 40 views
0

olaylarındaki çağrı işlevleri bir olaydan sonra function demandConnexion işlevini çağırmaya çalışıyorum, ancak benim için çalışıyor, bana "this.demandeConnexion bir işlev değil" diyor. Bunu nasıl çalıştırabilirim? yardım, bu kod:NodeJs

Serveur.prototype.demandConnexion = function(idZEP) { 

    if (this.ZP.createZE(idZEP)) 

     { 

     console.log(' ==> socket : demande de creation ZE pour '+idZEP +' accepte'); 

     } 

    else 

     { 

     console.log(' ==> socket : demande de creation ZE pour '+idZEP +' refuse'); 

     } 
}; 

Serveur.prototype.traitementSurConnection = function(socket) { 

    // console.log('connexion'); 

    console.log(' ==> socket connexion'); 

    // traitement de l'evenement DEMANDE DE CONNEXION D'UNE ZE 

    socket.on('connection', (function(idZEP) { this.demandConnexion(idZEP) 

     console.log('good') 

})) 

cevap

2

Geri arama çağrıldığında "bu" sizin "Serveur" örneğiniz değildir. Senin durumunda ok fonksiyonlarını kullanmak olacaktır

var that = this; 
 
socket.on('connection', (function(idZEP) { 
 
    that.demandConnexion(idZEP) 
 
    console.log('good') 
 
}))

veya

socket.on('connection', this.demandConnexion.bind(this));

bir diğer çözüm (Bence en iyi) gibi bir şey denemek Kapatma

ile aynı kapsamı korumak için
socket.on('connection',()=>{ 
    //here this refers to your Serveur (the enclosing scope) 
}); 
1

içeri denir fonksiyonu ifade eder. Eğer node.js kullandığınız gibi, bunu şimdi düşünüyorum, ya da this set bağlamda mevcut this yapmak için bir ok fonksiyonu kullanabilirsiniz ya Fonksiyonun dışında bir değişken.

socket.on('connection', idZEP => this.demandConnexion(idZEP)) 

Ya

var that = this; 
socket.on('connection', function(idZEP) { that.demandConnexion(idZEP) });