Utilities for working with Promise.allSettled results, including type guards and value extraction functions.
This module provides the following functionality:
/**
* Type guard to check if a PromiseSettledResult is fulfilled
* @param input - Promise result to check
* @returns true if the promise was fulfilled
*/
function isFulfilled<T>(
input: PromiseSettledResult<T>
): input is PromiseFulfilledResult<T>;
/**
* Type guard to check if a PromiseSettledResult is rejected
* @param input - Promise result to check
* @returns true if the promise was rejected
*/
function isRejected(
input: PromiseSettledResult<unknown>
): input is PromiseRejectedResult;
/**
* Extracts values from fulfilled promises
* @param results - Array of promise results from Promise.allSettled
* @returns Array of values from fulfilled promises only
*/
function getFulfilledValues<T>(results: PromiseSettledResult<T>[]): T[];import { isFulfilled, isRejected, getFulfilledValues } from '@lightdash/common';
// Use with Promise.allSettled
const promises = [
Promise.resolve('success1'),
Promise.reject('error'),
Promise.resolve('success2'),
];
const results = await Promise.allSettled(promises);
// Filter fulfilled promises
const fulfilled = results.filter(isFulfilled);
// Returns: [{ status: 'fulfilled', value: 'success1' }, { status: 'fulfilled', value: 'success2' }]
// Filter rejected promises
const rejected = results.filter(isRejected);
// Returns: [{ status: 'rejected', reason: 'error' }]
// Extract fulfilled values
const values = getFulfilledValues(results);
// Returns: ['success1', 'success2']import { isFulfilled, isRejected, getFulfilledValues } from '@lightdash/common';
// Execute multiple promises and handle settled results
const results = await Promise.allSettled([
fetchUser(1),
fetchUser(2),
fetchUser(3),
]);
// Filter successful results
const successful = results.filter(isFulfilled);
console.log(`${successful.length} succeeded`);
// Filter failed results
const failed = results.filter(isRejected);
failed.forEach(result => {
console.error(`Failed: ${result.reason}`);
});
// Extract values from successful promises
const values = getFulfilledValues(results);
// Returns: array of successfully resolved values
console.log(`Got ${values.length} user objects`);import { sleep } from '@lightdash/common';
async function delayedOperation() {
console.log('Starting...');
await sleep(1000); // Wait 1 second
console.log('Done!');
}sleep() function for delayed operations