signature: defer(observableFactory: function(): SubscribableOrPromise): Observable

Create an observable with given subscription function.

💡 defer is used as part of the iif operator!


Example 1: Defer to get current date/time at the time of subscription

( StackBlitz )

// RxJS v6+
import { defer, of, timer, merge } from 'rxjs';
import { switchMap } from 'rxjs/operators';

const s1 = of(new Date()); //will capture current date time
const s2 = defer(() => of(new Date())); //will capture date time at the moment of subscription

console.log(new Date());

  .pipe(switchMap(_ => merge(s1, s2)))

2019-02-10T12:38:30.000Z (currrent date/time from first console log)
2019-02-10T12:38:30.000Z (date/time in s1 console log, captured date/time at the moment of observable creation)
2019-02-10T12:38:32.000Z (date/time in s2 console log, captured date/time at the moment of subscription)

/*//NOTE: 'traditional' js equivalent of timer code above is:
setTimeout(() => {
}, 2000);

Additional Resources

  • defer 📰 - Official docs

📁 Source Code:

Last updated