Me gustaría asegurarme de que, incluso cuando falla, el código de seguimiento de eventos en mi front-end nunca provoque un error que afecte al resto de la aplicación. El seguimiento de eventos lo manejan algunas clases personalizadas que se ocupan de etiquetar las noches y agregar las propiedades correctas:
export class TaskTrackerService { constructor(private abstractTracker: TrackerService) { } // ------ created(task: Task): void { this. abstractTracker.track('Task created', this.taskProps(task)) } // ------ edited(task: Task): void { this.abstractTracker.track('Task edited', this.taskProps(task)) } // ------ private taskProps(task: Task): EventProperties{ return { id: task.id, task_title_char_count: task.title.length, task_duration_seconds: task.duration, completed: task.done, created_at: new Date(task.created_at) } } }Esta clase contiene lógica que podría causar errores (por ejemplo, task.created_at es nulo en el código anterior) y quiero asegurarme de detectarlos antes de que causen daños.
Quiero asegurarme de que cualquier error que se active en la clase de seguimiento no se propague en ningún otro lugar de la aplicación.
La única forma en que puedo pensar en hacer esto es agregar el manejo de errores para cada método de seguimiento individual como se muestra a continuación:
export class TaskTrackerService { constructor(private abstractTracker: TrackerService) { } // ------ created(task: Task): void { try{ this.abstractTracker.track('Task created', this.taskProps(task)) } catch(error){ this.abstractTracker.trackError('Error occurred') } } ... }Para reducir la cantidad de código repetitivo, me gustaría algún medio para garantizar que todos los métodos instantáneos borbotean sus errores en un controlador de nivel de clase. Algo como esto:
export class TaskTrackerService { constructor(private abstractTracker: TrackerService) { } // I know this isn't possible but... catchAll(error){ this.abstractTracker.trackError('Error occurred') } // ------ created(task: Task): void { this.abstractTracker.track('Task created', this.taskProps(task)) } ... }¿Es posible algo así?