or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

api

features

charts

charts.mdconditional-formatting.mdvisualizations.md
authorization.mdchangesets.mdcharts-as-code.mdcompiler.mddashboards.mddbt.mdee-features.mdformatting.mdparameters.mdpivot.mdprojects-spaces.mdsql-runner.mdtemplating.mdwarehouse.md
index.md
tile.json

promises.mddocs/api/utilities/specialized/

Promise Utilities

Utilities for working with Promise.allSettled results, including type guards and value extraction functions.

Capabilities

This module provides the following functionality:

Type Guards and Utilities

/**
 * 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[];

Examples

Basic Usage with Promise.allSettled

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']

Real-World Example: Multiple API Calls

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

Delayed Operation Example

import { sleep } from '@lightdash/common';

async function delayedOperation() {
  console.log('Starting...');
  await sleep(1000); // Wait 1 second
  console.log('Done!');
}

Use Cases

  • Parallel Operations: Execute multiple independent operations and handle both successes and failures
  • Partial Success Handling: Process all successful results even when some operations fail
  • Error Collection: Collect all errors from failed operations for logging or reporting
  • Resilient Processing: Continue processing data even when some data sources fail
  • Batch Operations: Perform batch operations where individual failures shouldn't stop the entire batch

Related Utilities

  • Sleep Utility: See misc.md for the sleep() function for delayed operations