7
votes

TypeError: Impossible de lire la propriété 'EMIT' de non définie

Le problème est que chaque fois que j'essaie de tirer "Cet événement" cet événement ", un typeError se produit. Il ne donne que lorsque j'écris cette déclaration "this.io.emit" dans le bloc "socket.on" autrement, sinon j'écris à l'extérieur de ce bloc, il ne génère aucune erreur.

Ceci est le fichier Server.js principal. autres bibliothèques: xxx

mon code côté serveur est: xxx

J'ai également essayé d'accéder "this.utilisateur.le Longueur "Inside Socket.on La déclaration et il génère le même TypeError: impossible de lire la longueur de la propriété. Je ne sais pas pourquoi cela se produit. Aidez-moi s'il vous plaît à résoudre ce problème.

côté client: xxx


0 commentaires

3 Réponses :


7
votes

Le contexte de Ce code> est un problème dans votre code. Pour réussir le contexte actuel, utilisez Bind code> ou la fonction de flèche code> code>. En JavaScript, la valeur de ceci code> est définie par comment vous avez appelé la fonction em>, qui dans votre cas est socket code> objet.

socketEvents()
{
    this.io.on('connection',(socket) => {
        socket.on('send message',function(data)
        {
            this.io.emit('new message',data);//here the error lies.
        }bind(this));
    }); 
}


3 commentaires

Mais j'ai une autre application exactement similiar, la différence est là que j'utilise angularjs qui ne donne aucune erreur si vous utilisez la syntaxe errorne "this.io.emit". Qui explose mon esprit que. Y a-t-il une différence dans le traitement de «cela» dans les deux (JavaScript et Angularjs)?


Pouvez-vous montrer ce code? Cela dépend de la manière dont le code est écrit, mais le ceci fonctionnerait de la même manière que je sache.


Je sais que le problème réel était d'utiliser simplement de la fonction arrow et de fonctionner sans contraignation de cela.



0
votes

Ceci est parce que le contexte de ceci est différent pour la fonction interne.

Essayez: P>

socketEvents()
{
    this.io.on('connection',(socket) => {
        socket.on('send message',function(data)
        {
            socket.emit('new message',data);//here the error lies.
        });
    }); 
}


1 commentaires

Vous avez raison mais votre réponse n'a pas de sens car elle ne fournit pas la solution pour utiliser "cette" socket inside.on. Il fournit simplement une solution alternative qui n'est pas utile dans mon cas. Comme je dois utiliser «ce» mot-clé (obligatoire).



0
votes

Utilisez io.emit () au lieu de socket.Broadcast.emit () xxx


0 commentaires