Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Subject do RxJS e o método .next()

Bom dia pessoal. Tudo bem?

Alguém poderia me explicar o que é o Subject do RxJS e o método .next()?

Um amigo meu usou esses dois em uma classe no Angular e não soube me explicar o motivo de usar, apenas disse que funciona e eu queria saber o que está acontecendo.

O código que ele fez é esse:

type Severities = 'success' | 'info' | 'warn' | 'error';

@Injectable({
    providedIn: 'root',
})
export class NotificationsService {

    notificationChange: Subject<Object> = new Subject<Object>();

    notify(severity: Severities, summary: string, detail: string) {

        const sticky = (severity === 'error');
        const life = (severity === 'warn') ? AppSettings.WARN_TOAST_LIFE : AppSettings.DEFAULT_TOAST_LIFE;

        this.notificationChange.next({ 'severity': severity, 'summary': summary, 'detail': detail, 'life': life, 'sticky': sticky });
    }
}

Outra pergunta, aquele:

type Severities = 'success' | 'info' | 'warn' | 'error';

é ele declarando um tipo chamado Severities e dizendo que os tipos são 'success', 'info', 'warn' e 'error'?

Valeu galera!

4 respostas
solução

Fala aí Eduardo, tudo bem?

O Subject é um tipo especial de Observable (sim, ele também é um Observable), eles são especiais pois além de ser um Observable e um Observer, podem atuar como um EventEmitter.

A função next é utilizada para passar valores para o Subject e completá-lo, dessa maneira, ao chamar o .nextvocê estará dizendo que o mesmo foi completado.

Assim que completado, é chamado o .subscribe dele, até então o mesmo não era acionado.

Caso algum valor seja passado para o .next, esse valor chegará como parâmetro da função .subscribe.

Espero ter ajudado.

Ainda não entendi muito bem. Estou no celular no momento e não consigo abrir o código pra ver o código completo. Mas ele criou um Subject de Object, e aí esse subscribe é disparado pra executar o que? Isso que não tô entendendo.

Matheus, entendi. Alguém tem que fazer o subscribe no método que usa o .next para aí então ele ser executado. Muito obrigado!

Magina, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.