23 Feb 2024




Intermediate

Promises and async/await are both features in JavaScript used for handling asynchronous code, but they have different syntax and approaches.

  • Promises:

    • Promises represent the eventual success or failure of an asynchronous operation, allowing handling of results or errors after the operation finishes. Promises have states (pending, fulfilled, or rejected).
    • They have methods like .then() and .catch() to handle success and error cases respectively.
    • Promises allow you to chain asynchronous operations more easily compared to traditional callback-based approaches, making the code more readable and manageable.
    • Promises are part of the ECMAScript 6 (ES6) specification.
    • Promises can be created manually using the Promise constructor, or they are returned by many asynchronous functions in modern JavaScript libraries and APIs.

    Example of using Promises:

    function fetchData() {
        return new Promise((resolve, reject) => {
            // Asynchronous operation
            setTimeout(() => {
                // Simulated successful response
                resolve('Data fetched successfully');
            }, 2000);
        });
    }
    
    fetchData()
        .then(data => {
            console.log(data);
        })
        .catch(error => {
            console.error(error);
        });
    
  • Async/Await:

    • Async/await is a syntactical feature built on top of Promises.
    • Async functions are declared using the async keyword, and they always return a Promise.
    • Within an async function, the await keyword is used to pause the execution of the function until a Promise is resolved, effectively making asynchronous code appear synchronous.
    • Async/await makes asynchronous code more readable and easier to write, especially when dealing with multiple asynchronous operations.
    • Async/await was introduced in ECMAScript 2017 (ES8).

    Example of using Async/Await:

    async function fetchData() {
        return new Promise((resolve, reject) => {
            // Asynchronous operation
            setTimeout(() => {
                // Simulated successful response
                resolve('Data fetched successfully');
            }, 2000);
        });
    }
    
    async function fetchDataAndLog() {
        try {
            const data = await fetchData();
            console.log(data);
        } catch (error) {
            console.error(error);
        }
    }
    
    fetchDataAndLog();
    

Summary: Promises provide a way to work with asynchronous code using chaining and callbacks, while async/await offers a more concise and synchronous-like syntax for writing asynchronous code, making it easier to understand and maintain. However, both are powerful tools for managing asynchronous operations in JavaScript.

javascript
promises
async-await
differences