- Assunto : Na assinatura, ele sempre obtém os dados que são enviados após a assinatura, ou seja, os valores anteriores enviados não são recebidos .
const mySubject = new Rx.Subject();
mySubject.next(1);
const subscription1 = mySubject.subscribe(x => {
console.log('From subscription 1:', x);
});
mySubject.next(2);
const subscription2 = mySubject.subscribe(x => {
console.log('From subscription 2:', x);
});
mySubject.next(3);
subscription1.unsubscribe();
mySubject.next(4);
Com este exemplo, aqui está o resultado que será impresso no console:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Observe como as assinaturas que chegam atrasadas estão perdendo alguns dos dados que foram inseridos no assunto.
- Repetir assuntos : pode ajudar mantendo um buffer de valores anteriores que serão emitidos para novas assinaturas.
Aqui está um exemplo de uso para temas de repetição em que buffer of 2 previous values
são mantidos e emitidos em novas assinaturas:
const mySubject = new Rx.ReplaySubject(2);
mySubject.next(1);
mySubject.next(2);
mySubject.next(3);
mySubject.next(4);
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
Aqui está o que isso nos dá no console:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Assuntos de comportamento : são semelhantes aos assuntos de repetição, mas reemitirão apenas o último valor emitido ou um valor padrão se nenhum valor tiver sido emitido anteriormente:
const mySubject = new Rx.BehaviorSubject('Hey now!');
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
E o resultado:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Referência: https://alligator.io/rxjs/subjects/