Angular 4: ¿se puede ejecutar OnDestroy sin que se active OnInit?
Solo una pregunta genérica sobre los dos ganchos de ciclo de vidaOnInit
yOnDestroy
. Como estoartículo menciona, siempre asumí queOnInit
essiempre correr antes delOnDestroy
.
Tengo un caso donde en unngOnDestroy()
Estoy deteniendo la reproducción de una pista de música de fondo. Este sonido se carga del componentengOnInit()
y porque elngOnDestroy()
se está ejecutando sin elngOnInit()
se ejecuta el objeto de sonido esundefined
.
Código
ngOnInit() {
...
this.loadSounds();
...
}
ngOnDestroy() {
if (AppSettings.SOUNDS_ENABLED) {
this.soundService.getSound(Sound.MINI_GAME_BG_MUSIC).fade(0.2, 0, 1500);
}
}
private loadSounds() {
this.soundService.loadSound(Sound.MINI_GAME_BG_MUSIC, SoundPathURL.MINI_GAME_BG_MUSIC, true, 0);
}
En este momento el código está fallando en elngOnDestroy
cuando trato de.fade()
un sonido que esundefined
. Por supuesto, puedo solucionarlo fácilmente comprobando que el sonido noundefined
antes de ejecutar el.fade()
función. Mi suposición era que si unngOnDestroy()
se ejecuta elngOnInit()
debe haber sido ejecutado también, supongo que estaba equivocado.
Ahora debido a este caso, estoy pensando que en cadangOnDestroy()
en mi aplicación debo verificar si el objeto que se está usando esundefined
antes de realizar cualquier operación. Entonces, por ejemplo, antes de cancelar la suscripción de una suscripción, debería verificar si la suscripción esundefined
, y así.
¿Tengo razón en asumir eso?