After calling subscriber.error(), the observable stops and no further next() calls run.
Step 2: Check code sequence
Here, subscriber.next('Bye') is called after error, which is invalid and ignored.
Final Answer:
Calling subscriber.next after subscriber.error -> Option D
Quick Check:
next after error is invalid [OK]
Hint: No next() calls after error() [OK]
Common Mistakes:
Thinking complete() is required after error()
Believing next() after error() runs
Confusing error() with complete()
5. You want to create an observable that emits numbers 1 to 3 with a delay of 1 second between each. Which code correctly achieves this behavior?
hard
A. const obs = new Observable(subscriber => { [1,2,3].forEach(n => { setTimeout(() => subscriber.next(n), 1000); }); });
B. const obs = new Observable(subscriber => { for(let n=1; n<=3; n++) { setTimeout(() => subscriber.next(n), 1000); } });
C. const obs = new Observable(subscriber => { let n=1; const interval = setInterval(() => { subscriber.next(n); if(n===3) clearInterval(interval); n++; }, 1000); });
D. const obs = new Observable(subscriber => { subscriber.next(1); subscriber.next(2); subscriber.next(3); });
Solution
Step 1: Understand timing requirements
We need to emit 1, 2, 3 spaced by 1 second each.
Step 2: Analyze each option's timing
const obs = new Observable(subscriber => { [1,2,3].forEach(n => { setTimeout(() => subscriber.next(n), 1000); }); }); emits 1,2,3 all after 1 second simultaneously. const obs = new Observable(subscriber => { for(let n=1; n<=3; n++) { setTimeout(() => subscriber.next(n), 1000); } }); emits all after 1 second simultaneously. const obs = new Observable(subscriber => { let n=1; const interval = setInterval(() => { subscriber.next(n); if(n===3) clearInterval(interval); n++; }, 1000); }); uses setInterval to emit each number every 1 second and stops after 3. const obs = new Observable(subscriber => { subscriber.next(1); subscriber.next(2); subscriber.next(3); }); emits all immediately without delay.
Final Answer:
const obs = new Observable(subscriber => { let n=1; const interval = setInterval(() => { subscriber.next(n); if(n===3) clearInterval(interval); n++; }, 1000); }); -> Option C
Quick Check:
setInterval with clearInterval emits spaced values [OK]
Hint: Use setInterval and clearInterval for timed emissions [OK]
Common Mistakes:
Using forEach with setTimeout causes all to run at once
Not clearing interval causing infinite emissions
Emitting all values immediately without delay
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.