1
resposta

Duvida sobre o Subscription

Em qual momento o OnDestroy é chamado para poder faze as desinscrição do Observable ?

No exemplo da aula havia apenas um servico que se utilizva do Observable caso eu tenha mais servico no meu.tsseria necessario criar outras variaveis para realizar a unsubscribe ? exemplo

  listaLivros: [];
  listaRoupa: [];
  listaComida: [];
  campoBusca: string = ''
  Subscription: Subscription
  Subscription02: Subscription
  Subscription03: Subscription

  constructor(private service: LivroService) { }

 ngOnDestroy(): void {
    this.Subscription.unsubscribe()
    this.Subscription02.unsubscribe()
    this.Subscription03.unsubscribe()
  }

  buscarLivros() {
    this.Subscription = this.service.buscarLivros(this.campoBusca).subscribe(
      {
        next: (resposta) => {
          this.listaLivros = resposta.items
        },
        error: (erro) => {
          console.log(erro)
        },
        complete: () => { console.log('Complete') }

      }
    )
  }

  buscarRoupas() {
    this.Subscription02 = this.service.buscarRoupas(this.campoBusca).subscribe(
      {
        next: (resposta) => {
          this.listaRoupa = resposta.items
        },
        error: (erro) => {
          console.log(erro)
        },
        complete: () => { console.log('Complete') }

      }
    )
  }


  buscarComida() {
    this.Subscription03 = this.service.buscarComida(this.campoBusca).subscribe(
      {
        next: (resposta) => {
          this.listaComida = resposta.items
        },
        error: (erro) => {
          console.log(erro)
        },
        complete: () => { console.log('Complete') }

      }
    )
  }

  
}

Ou eu poderia utilizar a mesma variavem em diferentes servicos? caso possa utilizar a mesma variavel para diferentes servicos com o ngOnDestroy saberia para qual método ele estaria se desinscrevendo?

1 resposta

Olá Luiz!

O ngOnDestroy é chamado automaticamente quando o componente está prestes a ser destruído, ou seja, quando ele é removido do DOM. Esse é o momento ideal para realizar a(o) (unsubscribe) dos Observables, evitando assim vazamentos de memória.

Em relação a múltiplos serviços e variáveis de Subscription, você fez certinho ao criar variáveis separadas para cada assinatura de Observable. Porque cada subscribe retorna uma nova Subscription, e você deve manter uma referência a cada uma delas para poder chamar unsubscribe posteriormente, ou seja, até tem a possibilidade, mas não é recomendável.

Se você usasse a mesma variável de Subscription para diferentes serviços, a última assinatura sobrescreveria a anterior, e você perderia a referência para as assinaturas anteriores, impossibilitando a desinscrição delas. Portanto, é importante manter uma variável para cada assinatura.

Espero ter ajudado! Bons estudos!

Feliz Natal!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!