Angular 4 - O OnDestroy pode ser executado sem que o OnInit seja acionado?
Apenas uma pergunta genérica sobre os dois ganchos do ciclo de vidaOnInit
eOnDestroy
. Como esteartigo menciona, eu sempre assumi queOnInit
ésempre corra antes doOnDestroy
.
Eu tenho um caso em que em umngOnDestroy()
Estou impedindo a reprodução de uma faixa de música de fundo. Este som é carregado no componentengOnInit()
e porque ongOnDestroy()
está sendo executado sem ongOnInit()
sendo executado o objeto de som éundefined
.
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);
}
No momento, o código está falhando nongOnDestroy
ao tentar.fade()
um som que éundefined
. Claro que posso consertar isso facilmente verificando se o som não estáundefined
antes de executar o.fade()
função. Minha suposição era que se umngOnDestroy()
é executado ongOnInit()
deve ter sido executado também - acho que estava errado.
Agora, devido a este caso, estou pensando que em todos osngOnDestroy()
no meu aplicativo, devo verificar se o objeto que está sendo usado éundefined
antes de executar qualquer operação. Por exemplo, antes de cancelar a assinatura de uma assinatura, devo verificar se a assinatura éundefined
, e assim por diante.
Estou certo em assumir isso?