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

131
Visualizações
Cliente que regresa indefinido

Tengo una clase de controlador de eventos personalizada donde tengo lo siguiente

 public client: NullClient; public path: string; constructor(client: NullClient, path: string){ this.client = client; this.path = path; } loadAll() { for(const type of readdirSync(this.path)) { for(const file of readdirSync(`${this.path}/${type}`).filter((file) => file.endsWith('.js'))) { const props = require(`${this.path}/${type}/${file}`).default; const listener: Listener = new props(); listener.client = this.client; if(listener instanceof Listener) { const emitter = this.emitters.get(listener.emitter); if(!this.isEmitter(emitter)) throw new Error(`INVALID EMITTER!`); listener.type === 'on' ? emitter?.on(listener.event, listener.exec) : emitter?.once(listener.event, listener.exec); return listener; } else { throw new Error('INVALID TYPE!'); } } } }

Lo que estoy tratando de hacer aquí es configurar listener.client como el cliente pasó por this.client pero hay 2 problemas con los que me estoy encontrando.

  1. console.log(this.client) en la clase de controlador SIEMPRE devuelve un objeto ClientUser incompleto, donde Client#user SIEMPRE es nulo

  2. Intentar llamar a this.client en cualquiera de mis eventos SIEMPRE devuelve indefinido.

Mi clase de oyente es:

 import NullClient from '../../lib/NullClient'; export default class Listener { public emitter: string; public event: string; public type?: 'on' | 'once'; public client!: NullClient; constructor(options: ListenerOptions) { this.emitter = options.emitter; this.event = options.event; this.type = options.type || 'on'; } exec(...args: any) { throw new Error('EXEC FUNCTION NOT IMPLEMENTED! Your listener is missing an \'exec\' function'); } } interface ListenerOptions { emitter: string; event: string; type?: 'on' | 'once'; }

Extender fuera de esta clase y luego intentar llamar a this.client devuelve indefinido, ¿alguien sabe qué puedo hacer o cambiar para que funcione?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Está pasando listener.exec al emitter , lo que hace que listener.exec sea una devolución de llamada. Cuando se ejecuta, this no funcionará como espera. Las devoluciones de llamada deben vincularse para que this funcione correctamente.

Prueba esto en su lugar

 emitter?.on(listener.event, listener.exec.bind(listener));

De esta manera, cuando se ejecute exec , this dentro estará vinculado a listener , por lo que acceder a this.client será equivalente a listener.client

about 4 years ago · Juan Pablo Isaza 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