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);