Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

277
Visualizações
No se puede leer la propiedad 'emitir' de mecanografiado indefinido

estoy creando una aplicación de chat simple con socket io angular 2 (mecanografiado) y nodejs como servidor backend. Tengo esta función que funciona perfectamente cuando hago clic en el botón de conexión.

 connectUser(name){ if (name == null || name == ""){ return console.log('you must enter a valid username'); } this.username = name; this.socket.emit('add-user',name); //load connected users in the user-window section this.socket.emit('request-users',{data:'request users success'}); var connecctedUsersListener$ = Observable.fromEvent(this.socket,'users'); connecctedUsersListener$.subscribe((observer:any)=>{ this.users = observer; },(err)=>{ if(err) throw err; },()=>{ console.log('complet'); }); //load messages and keep track of Them this.socket.emit('request-messages',{data:'request Messages success'}); var messageListener$ = Observable.fromEvent(this.socket,'message'); messageListener$.subscribe((observer:any) =>{ this.messages = observer; }) }

sin embargo, trato de usar bootbox.prompt cada vez que el usuario intenta conectarse, así que envuelvo todo el código dentro de esta función simple

 addUser(){ bootbox.prompt('what is your name ',function(name){ connectUser(name); // this is the function in the first code snippet }); }

Recibo este error extraño No se puede leer la propiedad 'emitir' de undefined ¿Cómo puedo solucionarlo y cuál es el problema aquí?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Cuando está llamando a connectUser desde addUser, lo está haciendo desde otra función (aparentemente una devolución de llamada).

Javascript vincula ' esto ' a la función contenedora que está utilizando, y esa función no tiene un miembro ' socket '.

Cuando llama a la función connectUser directamente desde el botón de conexión, probablemente la esté llamando en línea desde el objeto, por lo tanto, ' this ' está vinculado al objeto que contiene el miembro ' socket '.

Revise el siguiente fragmento para ver cómo le afecta el envoltorio "function() { }":

 class Whatever { socket: { emit: string } constructor() { this.socket = { emit: 'works' }; } doSomething() { console.warn(this.socket.emit); } works() { this.doSomething(); (() => this.doSomething())(); } doesntWork() { (function () { this.doSomething() })(); } } let obj = new Whatever(); obj.works(); obj.doesntWork();

Básicamente, probablemente puedas cambiar esto:

 function(name) { connectUser(name); }

Para esto

 (name) => connectUser(name)

y debería funcionar.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda