Bird
Raised Fist0
Angularframework~5 mins

catchError for error handling in Angular - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of catchError in Angular?

catchError is used to handle errors in observable streams. It lets you catch errors and return a new observable or perform side effects, preventing the app from crashing.

Click to reveal answer
beginner
How do you import <code>catchError</code> in an Angular service?
<p>You import it from <code>rxjs/operators</code> like this:<br><code>import { catchError } from 'rxjs/operators';</code></p>
Click to reveal answer
intermediate
What does the catchError operator expect as its argument?

It expects a function that takes an error and returns a new observable, often using of() to emit a fallback value or throwError() to rethrow.

Click to reveal answer
beginner
Show a simple example of using catchError in an HTTP request.
this.http.get('/api/data').pipe(
  catchError(error => {
    console.error('Error caught:', error);
    return of([]); // Return empty array as fallback
  })
);
Click to reveal answer
beginner
Why is it important to handle errors with catchError in Angular apps?

Handling errors prevents the app from crashing, improves user experience by showing friendly messages or fallback data, and helps developers debug issues.

Click to reveal answer
What does catchError return when it catches an error?
AA plain value
BA promise
CA new observable
DAn error object
Where do you import catchError from in Angular?
A'rxjs/operators'
B'@angular/core'
C'rxjs'
D'@angular/common/http'
Which RxJS function is commonly used inside catchError to return fallback data?
Aof()
Bmap()
Cfilter()
DthrowError()
What happens if you don't use catchError in an observable that errors?
AThe observable will ignore the error
BThe error will crash the app or stop the stream
CThe error will be logged automatically
DThe observable will retry automatically
Which of these is a correct way to use catchError?
Aobservable.catchError(error => throw error)
BcatchError(observable => error)
CcatchError(() => console.log('error'))
Dobservable.pipe(catchError(error => of('fallback')))
Explain how catchError helps in managing errors in Angular observable streams.
Think about what happens when an error occurs in a data stream.
You got /4 concepts.
    Describe a simple example of using catchError with an HTTP request in Angular.
    Imagine you want to show empty data if the server fails.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of catchError in Angular's RxJS?
      easy
      A. To delay the emission of values in an Observable
      B. To catch errors in an Observable stream and handle them gracefully
      C. To create a new Observable from scratch
      D. To unsubscribe from an Observable automatically

      Solution

      1. Step 1: Understand what catchError does

        catchError is used to catch errors that happen in an Observable stream and lets you handle them without breaking the stream.
      2. Step 2: Compare with other options

        Creating new Observables, delaying emissions, or unsubscribing are different RxJS tasks not related to catchError.
      3. Final Answer:

        To catch errors in an Observable stream and handle them gracefully -> Option B
      4. Quick Check:

        catchError handles errors [OK]
      Hint: catchError is for handling errors inside Observable streams [OK]
      Common Mistakes:
      • Thinking catchError creates Observables
      • Confusing catchError with delay or unsubscribe
      • Assuming catchError stops the Observable completely
      2. Which of the following is the correct syntax to use catchError inside an Observable pipe?
      easy
      A. catchError(observable, error => of('Error caught'))
      B. observable.catchError(error => of('Error caught'))
      C. observable.pipe(catchError(error => of('Error caught')))
      D. observable.pipe(catchError => error => of('Error caught'))

      Solution

      1. Step 1: Recall the correct usage of catchError

        catchError is used inside pipe() and takes a function with an error parameter returning a new Observable.
      2. Step 2: Identify the correct syntax

        observable.pipe(catchError(error => of('Error caught'))) correctly uses pipe(catchError(error => of('Error caught'))). Other options misuse method chaining or syntax.
      3. Final Answer:

        observable.pipe(catchError(error => of('Error caught'))) -> Option C
      4. Quick Check:

        Use catchError inside pipe() [OK]
      Hint: Always use catchError inside pipe() with a function [OK]
      Common Mistakes:
      • Calling catchError directly on observable
      • Wrong arrow function syntax inside catchError
      • Passing catchError arguments incorrectly
      3. Given the code below, what will be the output?
      import { of, throwError } from 'rxjs';
      import { catchError } from 'rxjs/operators';
      
      const source$ = throwError(() => new Error('Oops!'));
      
      source$.pipe(
        catchError(err => of('Error handled'))
      ).subscribe(value => console.log(value));
      medium
      A. Throws an error and stops
      B. No output
      C. Logs 'Oops!'
      D. Logs 'Error handled'

      Solution

      1. Step 1: Understand throwError and catchError interaction

        throwError creates an Observable that immediately errors. catchError catches this error and returns a new Observable emitting 'Error handled'.
      2. Step 2: Trace the subscription output

        The subscriber receives 'Error handled' and logs it. The original error is replaced by the catchError Observable.
      3. Final Answer:

        Logs 'Error handled' -> Option D
      4. Quick Check:

        catchError replaces error with new value [OK]
      Hint: catchError replaces error with new Observable output [OK]
      Common Mistakes:
      • Expecting original error to be logged
      • Thinking error stops the stream without catchError
      • Confusing error message with emitted value
      4. Identify the error in this code snippet using catchError:
      import { of, throwError } from 'rxjs';
      import { catchError } from 'rxjs/operators';
      
      const source$ = throwError(() => new Error('Fail'));
      
      source$.pipe(
        catchError(err) {
          return of('Recovered');
        }
      ).subscribe(console.log);
      medium
      A. Missing parentheses around catchError argument function
      B. Using throwError incorrectly
      C. Not subscribing to the Observable
      D. Returning a string instead of an Observable inside catchError

      Solution

      1. Step 1: Check catchError function syntax

        The argument to catchError must be a function expression or arrow function inside parentheses. Here, parentheses are missing around the function.
      2. Step 2: Verify other parts

        throwError usage is correct, subscription exists, and return value inside catchError is an Observable (of('Recovered')), so no issues there.
      3. Final Answer:

        Missing parentheses around catchError argument function -> Option A
      4. Quick Check:

        Function argument to catchError needs parentheses [OK]
      Hint: Wrap catchError callback in parentheses or use arrow function [OK]
      Common Mistakes:
      • Omitting parentheses around function in catchError
      • Returning non-Observable values inside catchError
      • Not subscribing to see output
      5. You want to retry an HTTP request up to 3 times and then handle errors gracefully using catchError. Which code snippet correctly combines retry and catchError?
      hard
      A. http.get(url).pipe(retry(3), catchError(err => of('Failed after retries')))
      B. http.get(url).pipe(catchError(err => of('Failed')), retry(3))
      C. http.get(url).pipe(catchError(err => retry(3)), of('Failed'))
      D. http.get(url).pipe(retry(3).catchError(err => of('Failed')))

      Solution

      1. Step 1: Understand operator order in pipe

        retry(3) should come before catchError so retries happen before error handling.
      2. Step 2: Analyze each option

        http.get(url).pipe(retry(3), catchError(err => of('Failed after retries'))) correctly chains retry(3) then catchError. http.get(url).pipe(catchError(err => of('Failed')), retry(3)) reverses order, so catchError stops retries. http.get(url).pipe(catchError(err => retry(3)), of('Failed')) misuses catchError and retry. http.get(url).pipe(retry(3).catchError(err => of('Failed'))) uses invalid chaining syntax.
      3. Final Answer:

        http.get(url).pipe(retry(3), catchError(err => of('Failed after retries'))) -> Option A
      4. Quick Check:

        retry before catchError in pipe [OK]
      Hint: Place retry before catchError inside pipe() [OK]
      Common Mistakes:
      • Putting catchError before retry disables retries
      • Using invalid chaining syntax
      • Returning non-Observable inside catchError
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard