Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!