Promises, Classes, and Modules in ES6

JavaScript, being a versatile programming language, constantly evolves to meet the demands of modern web development. With the release of ECMAScript 6 (also known as ES6), several new features were introduced to enhance the language, including Promises, Classes, and Modules.


Promises are a way to handle asynchronous operations in JavaScript. Prior to ES6, managing asynchronous code could be challenging, leading to callback hell and difficult-to-read code. Promises provide a more structured and readable approach to handling asynchronous operations.

A Promise represents the eventual completion or failure of an asynchronous operation and allows you to attach callbacks that will be executed when the operation is finished. Promises have three states - pending, fulfilled, or rejected. Initially, a Promise is in the pending state. Once the asynchronous operation completes successfully, it transitions to the fulfilled state, while any errors result in the rejected state.

ES6 introduced the Promise class, which simplifies working with asynchronous code. You can create a new Promise using the new Promise() syntax. Inside the Promise constructor, you define the asynchronous operation and call the resolve() function to fulfill the Promise or reject() to reject it.

const myPromise = new Promise((resolve, reject) => {
  // Asynchronous operation here
  if (/* operation successful */) {
    resolve('Operation completed!');
  } else {
    reject('Operation failed!');

myPromise.then((result) => {
  // Handle success
}).catch((error) => {
  // Handle error

By using Promises, you can chain multiple asynchronous operations and handle them using .then() and .catch() methods, making your code more readable and maintainable.


ES6 introduced the concept of classes to JavaScript, allowing developers to write object-oriented code in a more familiar syntax. Prior to ES6, classes were simulated using constructor functions, resulting in verbose and error-prone code.

With the introduction of classes, you can now define a blueprint for creating objects in a more concise and structured manner. The class keyword is used to declare a class, and you can define methods and properties inside the class body using class methods and class fields respectively.

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;

  getArea() {
    return this.width * this.height;

  static createSquare(sideLength) {
    return new Rectangle(sideLength, sideLength);

const myRectangle = new Rectangle(5, 10);
console.log(myRectangle.getArea()); // Output: 50

const mySquare = Rectangle.createSquare(6);
console.log(mySquare.getArea()); // Output: 36

ES6 classes support inheritance using the extends keyword, enabling you to create a class that inherits properties and methods from another class.

Classes in ES6 make object-oriented programming in JavaScript more intuitive and organized, reducing code duplication and improving code readability.


ES6 introduced native support for modules in JavaScript, enabling developers to write modular, reusable, and maintainable code. Prior to ES6, developers relied on third-party libraries or module loaders to handle module management.

A module is a self-contained block of code that provides functionality and exposes a specific set of features. It can export variables, functions, classes, or objects that can be imported and used in other modules.

To export something from a module, you use the export keyword. You can export variables, functions, or classes individually or as a group using the export keyword alongside the declaration.

// math.js module
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

export function multiply(a, b) {
  return a * b;

// app.js
import { add, multiply } from './math.js';

console.log(add(5, 10)); // Output: 15
console.log(multiply(5, 10)); // Output: 50

ES6 modules use strict mode by default and have their own scope, preventing pollution of the global scope. You can export and import modules both in the browser and on the server using tools like Webpack or Node.js.

Modules offer a standardized approach to organize and structure your code, making it easier to manage large-scale applications.


ES6 introduced several groundbreaking features to JavaScript, and Promises, Classes, and Modules are just a few of them. Promises offer a more elegant and structured approach to handling asynchronous operations. Classes provide a familiar syntax for object-oriented programming, improving code organization and reusability. Modules enable developers to write modular and maintainable code, reducing dependency on external libraries.

By understanding and utilizing these ES6 features, you can enhance your JavaScript codebase and improve your efficiency and productivity as a developer.

noob to master © copyleft