When we want to handle error observable in RxJS v6+, we can use 'retryWhen' and 'delayWhen':
const courses$: Observable<Counse[]> = http$ .pipe( tap(() => console.log("HTTP request")), map(res => Object.values(res['payload'])), shareReplay(), // avoid using async pipe multi times causing multi network request retryWhen(errors => errors.pipe( delayWhen(() => timer(2000)) // wait 2s after the error observable happens )) )