javascript | promises

Promises in Node.js - Core Methods and Patterns

A comprehensive guide to all core Promise methods and patterns in Node.js.

Tarun Sharma
Tarun SharmaAugust 29, 2022 · 2 min read · Last Updated:

1. Basic Promise Usage

const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Done!'), 1000);
});

promise.then(result => console.log(result)); // 'Done!'

2. Promise.all

const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);

Promise.all([p1, p2, p3])
  .then(results => console.log(results)); // [1, 2, 3]

// If any promise rejects, Promise.all rejects immediately

3. Promise.race

const slow = new Promise(res => setTimeout(() => res('slow'), 100));
const fast = new Promise(res => setTimeout(() => res('fast'), 10));

Promise.race([slow, fast])
  .then(result => console.log(result)); // 'fast'

4. Promise.allSettled

const p1 = Promise.resolve(1);
const p2 = Promise.reject('fail');
const p3 = Promise.resolve(3);

Promise.allSettled([p1, p2, p3])
  .then(results => console.log(results));
// [ { status: 'fulfilled', value: 1 }, { status: 'rejected', reason: 'fail' }, { status: 'fulfilled', value: 3 } ]

5. Promise.any

const p1 = Promise.reject('fail');
const p2 = Promise.resolve('success');
const p3 = Promise.resolve('another');

Promise.any([p1, p2, p3])
  .then(result => console.log(result)); // 'success'
// If all promises reject, returns AggregateError

6. Promise Chaining

Promise.resolve(1)
  .then(x => x + 1)
  .then(x => x * 2)
  .then(console.log); // 4

7. Error Handling in Promises

Promise.reject('Oops!')
  .catch(err => console.error('Caught:', err));

Promise.resolve()
  .then(() => { throw new Error('Error!'); })
  .catch(err => console.error('Caught:', err.message));

8. Custom Utility: Promisify Callback Functions

function promisify(fn) {
  return (...args) =>
    new Promise((resolve, reject) => {
      fn(...args, (err, ...results) => {
        if (err) return reject(err);
        resolve(results.length > 1 ? results : results[0]);
      });
    });
}

// Usage
// const fs = require('fs');
// const readFileAsync = promisify(fs.readFile);

9. Timeout a Promise

function promiseTimeout(promise, ms) {
  let timeout = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms)
  );
  return Promise.race([promise, timeout]);
}

// Usage
// promiseTimeout(fetch('https://example.com'), 1000).catch(console.error);

This page is open source. Noticed a typo? Or something unclear?
Improve this page on GitHub


Tarun Sharma

Written byTarun Sharma
Tarun Sharma is a software engineer by day and a full-stack developer by night. He's coding for almost a decade now. He codes 🧑‍💻, write ✍️, learn 📖 and advocate 👍.
Connect

Is this page helpful?

Related VideosView All

Stack Overflow Clone - APIs Integration Redux Toolkit [Closure] - App Demo #05

Become Ninja Developer - API security Best Practices with Node JS Packages #15

Nest JS Microservices using HTTP Gateway and Redis Services (DEMO) #nestjs #microservices #16