5
respostas

Dúvida sobre o código

Queria detalhes dessa linha this.alertSubject.next(new Alert(alertType, message);). Queria uma explicação detalhada do que é feito.

5 respostas

Fala ai Mauricio, tudo bem? A função .next irá disparar seus listeners com um novo valor.

Basicamente ela funciona como um emissor de evento, ou seja, nossos componentes realizam o subscribe para passar a receber eventos e quando a gente faz o .next eles são notificados.

Espero ter ajudado.

Não entendi. Poderia exemplificar, por favor?

Fala Mauricio, a ideia seria mais ou menos essa:

Primeiro você tem os subscribers:

// algum-arquivo-1.js
algumObservable().subscribe()

// algum-arquivo-3.js
algumObservable().subscribe()

// algum-arquivo-2.js
algumObservable().subscribe()

Imagine que são três arquivos diferentes (poderia ser três componentes), dessa forma, nosso Observable em seu array de listener possui três funções de callback para notificar.

Se a gente fazer:

algumObservable.next(1)

Ele vai notificar os três listeners, ou seja, os três arquivos que fizeram subscribe e como parâmetro irão receber o número 1.

Podemos fazer de novo:

algumObservable.next({ nome: 'Matheus' })

O processo iria ser o mesmo, os três serão notificados e receberam o objeto com a propriedade nome.

Por baixo dos panos, basicamente quando a gente chama o subscribe essa nova função é inserida em um array, algo assim:

const subscribe = (callback) => {
    listeners.push(callback)
}

Dessa forma a gente registrou todas as funções que precisamos chamar e quando chamamos o next, podemos percorrer esse array e chamá-las:

const next = (data) => {
    listeners.forEach(callback => callback(data))
}

Lembrando que é algo bem simples e com certeza a RxJS é mais avançada e complexa, mas, a ideia é mais ou menos essa e tem de ser parecida.

Espero ter ajudado.

Ok, acho que entendi. Mais uma coisa. Sobre o alertSubject: Subject<Alert> = new Subject<Alert>(); queria recordar o que é um Subject e porque ele precisou ser inicializado (new Subject<Alert>()).

Fala Mauricio, o Subject é um tipo especial de Observable que normalmente é utilizado para notificar vários observadores.

Seria a ideia de broadcast, ele envia e notifica vários lugares.

Espero ter ajudado.