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: p> mon code côté serveur est: p> 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. P> côté client: p>
3 Réponses :
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));
});
}
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 code> 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.
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. }); }); }
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).
Utilisez io.emit () fort> au lieu de