CodeGym /Courses /Frontend SELF EN /Error Handling

Error Handling

Frontend SELF EN
Level 44 , Lesson 2
Available

7.1 Using Callbacks

Error handling is a crucial aspect of writing reliable and fault-tolerant code. In asynchronous JavaScript code, errors can occur in both synchronous and asynchronous operations. Proper error management helps prevent unexpected failures and provides users with helpful error messages. Let's explore some methods of error handling in asynchronous code, including callbacks, Promises, and async/await.

Before Promises and async/await came along, asynchronous code was often implemented using callbacks. In this approach, errors are passed to the callback as the first argument.

Example:

JavaScript
    
      function fetchData(callback) {
        setTimeout(() => {
          const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
          const data = error ? null : { id: 1, name: 'John Doe' };
          callback(error, data);
        }, 1000);
      }

      fetchData((error, data) => {
        if (error) {
          console.error('Error:', error);
        } else {
          console.log('Data:', data);
        }
      });
    
  

7.2 Using Promises

Error Handling with Promises

Promises provide a more structured way to work with asynchronous code. Errors are handled using the catch method.

Example:

JavaScript
    
      function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      fetchData()
        .then(data => console.log('Data:', data))
        .catch(error => console.error('Error:', error));
    
  

Error Handling with async/await

async/await provides a syntactically convenient way to work with asynchronous code, making it more readable and similar to synchronous code. Errors in asynchronous functions can be handled using a try...catch construct.

Example:

JavaScript
    
      async function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      async function loadData() {
        try {
          const data = await fetchData();
          console.log('Data:', data);
        } catch (error) {
          console.error('Error:', error);
        }
      }

      loadData();
    
  

7.3 Global Error Handling

For global error handling in asynchronous code, you can use window.onError and window.onUnhandledRejection.

Example for window.onError:

JavaScript
    
      window.onerror = function (message, source, lineno, colno, error) {
        console.error('Global error handler:', error);
      };

      setTimeout(() => {
        throw new Error('Test error');
      }, 1000);
    
  

Example for window.onunhandledrejection:

JavaScript
    
      window.onunhandledrejection = function (event) {
        console.error('Unhandled rejection:', event.reason);
      };

      Promise.reject(new Error('Test unhandled rejection'));
    
  

7.4 Usage Examples

1. Asynchronous HTTP Requests with Fetch and Error Handling:

JavaScript
    
      async function fetchData() {
        try {
          const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
          if (!response.ok) {
            throw new Error('Network response was not ok');
          }
          const data = await response.json();
          console.log('Data:', data);
        } catch (error) {
          console.error('Fetch error:', error);
        }
      }

      fetchData();
    
  

2. Parallel Execution of Requests with Promise.all and Error Handling:

JavaScript
    
      async function fetchMultipleData() {
        try {
          const [response1, response2] = await Promise.all([
            fetch('https://jsonplaceholder.typicode.com/posts/1'),
            fetch('https://jsonplaceholder.typicode.com/posts/2')
          ]);

          if (!response1.ok || !response2.ok) {
            throw new Error('One of the responses was not ok');
          }

          const data1 = await response1.json();
          const data2 = await response2.json();

          console.log('Data 1:', data1);
          console.log('Data 2:', data2);
        } catch (error) {
          console.error('Fetch multiple data error:', error);
        }
      }

      fetchMultipleData();
    
  
1
Task
Frontend SELF EN, level 44, lesson 2
Locked
Mistakes in async/await
Mistakes in async/await
1
Task
Frontend SELF EN, level 44, lesson 2
Locked
Global Errors
Global Errors
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION