DEV Community

Nadim Chowdhury
Nadim Chowdhury

Posted on

Javascript promise mechanism, how it work?

JavaScript promises are objects that represent the eventual completion or failure of an asynchronous operation and its resulting value. Behind the scenes, promises are implemented using a combination of the event loop, microtask queue, and callbacks. Here's how the promise mechanism works:

  1. Creation of Promise: When you create a new promise, the executor function you provide is executed immediately. This executor function takes two parameters: resolve and reject. You use these functions to indicate the successful completion or failure of the asynchronous operation.
   const promise = new Promise((resolve, reject) => {
       // Asynchronous operation
       if (/* operation is successful */) {
           resolve(result); // Resolve the promise with the result
       } else {
           reject(error); // Reject the promise with an error
       }
   });
Enter fullscreen mode Exit fullscreen mode
  1. Pending Promise State: Initially, the promise is in a pending state. This means that the asynchronous operation has not yet completed, and the promise is neither fulfilled nor rejected.

  2. Execution of Asynchronous Operation: The asynchronous operation inside the promise executor is performed. This could be fetching data from a server, reading a file, or any other asynchronous task.

  3. Transition to Fulfilled or Rejected State: Once the asynchronous operation completes, the promise transitions to either the fulfilled or rejected state, depending on whether resolve or reject was called inside the executor function.

  • If resolve(result) is called, the promise transitions to the fulfilled state, and the then method callbacks (registered with .then()) associated with the promise are executed, receiving the resolved value (result) as an argument.
  • If reject(error) is called, the promise transitions to the rejected state, and the catch method callbacks (registered with .catch()) or the onRejected callback of .then() associated with the promise are executed, receiving the rejection reason (error) as an argument.
  1. Microtask Queue and Event Loop: Promise callbacks (.then() and .catch() handlers) are queued as microtasks. Microtasks have a higher priority than regular tasks in the event loop, ensuring that promise callbacks are executed before any other code, such as I/O operations or UI rendering.

  2. Chaining Promises: Promises allow for chaining using .then() and .catch() methods, which return new promises. This enables you to handle asynchronous operations sequentially or in a more complex manner.

   promise.then(result => {
       // Handle success
       return nextStep(result);
   }).then(nextResult => {
       // Handle next step
   }).catch(error => {
       // Handle error
   });
Enter fullscreen mode Exit fullscreen mode
  1. Error Propagation: If an error occurs in any .then() handler or the executor function itself, and it's not caught by a .catch() handler, the error propagates down the promise chain until it's caught by a .catch() handler or reaches the global error handler.

By using promises, JavaScript provides a more structured and convenient way to work with asynchronous code, making it easier to manage complex asynchronous operations and handle errors effectively.

Top comments (0)