0
0
Angularframework~20 mins

Subject types (Subject, BehaviorSubject, ReplaySubject) in Angular - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Subject Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
Behavior of Subject when subscribing late

Consider an Angular component using Subject from RxJS. The Subject emits values before a subscriber subscribes. What will the subscriber receive?

Angular
import { Subject } from 'rxjs';

const subject = new Subject<number>();
subject.next(1);
subject.next(2);

subject.subscribe(value => console.log('Subscriber received:', value));
subject.next(3);
ASubscriber received: 1, 2, 3
BSubscriber received: 3
CSubscriber received: 1, 2
DNo output
Attempts:
2 left
💡 Hint

Think about whether Subject stores past values for new subscribers.

component_behavior
intermediate
2:00remaining
BehaviorSubject initial value and subscription

What will be logged when subscribing to a BehaviorSubject that was created with an initial value and has emitted new values before subscription?

Angular
import { BehaviorSubject } from 'rxjs';

const behaviorSubject = new BehaviorSubject<number>(0);
behaviorSubject.next(1);
behaviorSubject.next(2);

behaviorSubject.subscribe(value => console.log('Subscriber received:', value));
ASubscriber received: 0
BSubscriber received: 0, 1, 2
CSubscriber received: 1
DSubscriber received: 2
Attempts:
2 left
💡 Hint

Remember that BehaviorSubject always emits the latest value to new subscribers.

state_output
advanced
2:00remaining
ReplaySubject buffer size effect

Given a ReplaySubject with buffer size 2, what values will a late subscriber receive if the subject emitted 4 values before subscription?

Angular
import { ReplaySubject } from 'rxjs';

const replaySubject = new ReplaySubject<number>(2);
replaySubject.next(10);
replaySubject.next(20);
replaySubject.next(30);
replaySubject.next(40);

replaySubject.subscribe(value => console.log('Subscriber received:', value));
ASubscriber received: 30, 40
BSubscriber received: 40
CSubscriber received: 10, 20, 30, 40
DNo output
Attempts:
2 left
💡 Hint

ReplaySubject replays the last bufferSize values to new subscribers.

📝 Syntax
advanced
2:00remaining
Correct usage of BehaviorSubject to hold string state

Which option correctly creates a BehaviorSubject holding a string and emits a new value?

Aconst subject = new BehaviorSubject<string>(); subject.next('next');
Bconst subject = new BehaviorSubject('start'); subject.emit('next');
Cconst subject = new BehaviorSubject<string>('start'); subject.next('next');
Dconst subject = BehaviorSubject<string>('start'); subject.next('next');
Attempts:
2 left
💡 Hint

Check the constructor syntax and method names for BehaviorSubject.

🔧 Debug
expert
3:00remaining
Why does this ReplaySubject not replay values?

In this Angular service, a ReplaySubject is created but subscribers do not receive any past values. What is the cause?

Angular
import { ReplaySubject } from 'rxjs';

export class DataService {
  private replaySubject = new ReplaySubject<number>(3);

  emitValues() {
    this.replaySubject.next(1);
    this.replaySubject.next(2);
    this.replaySubject.next(3);
  }

  getValues() {
    return this.replaySubject.asObservable();
  }
}

// In component
const service = new DataService();
service.emitValues();
service.getValues().subscribe(value => console.log('Received:', value));
AThe subscription happens after emitValues, but the ReplaySubject is recreated each time, losing previous values.
BReplaySubject buffer size is too small to hold emitted values.
CThe subscription happens after emitValues, so ReplaySubject should replay values correctly.
DReplaySubject does not replay values to late subscribers.
Attempts:
2 left
💡 Hint

Check if the ReplaySubject instance is the same when emitting and subscribing.