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

171
Visualizações
¿Por qué declaramos el método de cancelación de suscripción para un emisor de eventos en su declaración de método de suscripción?

Leí esta implementación de un emisor de eventos en LeetCode y quería hacer algunas preguntas.

  1. ¿Para qué sirve tener el método de release en el retorno del método de subscribe ? ¿Por qué no puedo hacer que sea su propio método?
  2. ¿Cómo uso el método de cancelación de unsubscribe como este y cómo lo usaría si fuera su propio método?
  3. El autor dijo que la razón detrás de poner la devolución de llamada dentro de un objeto era poder agregar múltiples devoluciones de llamada con el mismo nombre. ¿Eso se considera una buena práctica?
  4. ¿Alguna recomendación sobre cómo mejorar esta implementación (legibilidad, estructura)?
  5. ¿Por qué la variable de subscriptions no está definida en un constructor ?

Gracias.

 class EventEmitter { subscriptions = new Map() subscribe(eventName, callback) { if (!this.subscriptions.has(eventName)) { this.subscriptions.set(eventName, new Set()) } const newSub = { callback } this.subscriptions.get(eventName).add(newSub) return { unsubscribe: () => { const evSub = this.subscriptions.get(eventName) evSub.delete(newSub) if (evSub.size === 0) this.subscriptions.delete(eventName) } } } emit(eventName, ...args) { const callbacks = this.subscriptions.get(eventName) if (!callbacks) return for (let c of callbacks) { c.callback(...args) } } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

  1. ¿Para qué sirve tener el método de liberación en el retorno del método de suscripción? ¿Por qué no puedo hacer que sea su propio método?

Respuesta 1: En caso de que la cancelación de la suscripción necesite información que solo esté disponible al realizar la suscripción (como un eventName de suscripción), tiene sentido proporcionar la función directamente desde la creación. Le ahorra tener que almacenar los datos necesarios en el proceso de cancelación de suscripción en algún formulario intermediario. Puede crear su propio método si lo desea, pero aún debe devolverlo como en este código:

 unsubscribe(eventName) => { const evSub = this.subscriptions.get(eventName) evSub.delete(newSub) if (evSub.size === 0) this.subscriptions.delete(eventName) } subscribe(eventName, callback) { if (!this.subscriptions.has(eventName)) { this.subscriptions.set(eventName, new Set()) } const newSub = { callback } this.subscriptions.get(eventName).add(newSub) return () => unsubscribe(eventName); }
  1. ¿Cómo uso el método de cancelación de suscripción como este y cómo lo usaría si fuera su propio método?

Respuesta 2: almacena el valor de retorno de subscribe en algún lugar al que pueda acceder, luego invóquelo si es necesario llamando a unsubscribe() . La forma en que se usa no es diferente, ya sea en su propia función o no. Todavía necesita saber el eventName , por lo que necesita el devuelto por subscribe . Como en este código:

 const unsub = subscribe("event1", () => {}); // then later unsub(); // unsubscribe from event1
  1. El autor dijo que la razón detrás de poner la devolución de llamada dentro de un objeto era poder agregar múltiples devoluciones de llamada con el mismo nombre. ¿Eso se considera una buena práctica?

Respuesta 3: No tiene nada de malo. Es una elección de diseño.

  1. ¿Alguna recomendación sobre cómo mejorar esta implementación (legibilidad, estructura)?

Respuesta 4: Esa es una elección personal.

  1. ¿Por qué la suscripción no está definida en un constructor?

Respuesta 5: Supongo que está preguntando sobre la variable de subscriptions (plural) y no sobre la función de subscription . Se define como una variable de clase que no necesita ninguna inicialización específica para un parámetro ctor, por lo que no es necesario crear una. Podría ponerlo en un ctor si quisiera, pero solo hace que el código sea más largo sin ningún beneficio real. Si el ctor tomara algunos parámetros que afectarían el valor inicial de subscriptions , entonces podría hacerse en el ctor.

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