zip_future 1.2.0 copy "zip_future: ^1.2.0" to clipboard
zip_future: ^1.2.0 copied to clipboard

A Dart package for efficiently managing and executing multiple asynchronous operations (Futures) with advanced control over error handling, concurrency, and timeouts.

example/zip_future_example.dart

import 'dart:async';

import 'package:zip_future/zip_future.dart';

Future<int> delayedInt(int value, int ms) =>
    Future.delayed(Duration(milliseconds: ms), () {
      if (value == 2) throw Exception('Value $value failed');
      return value;
    });

void main() async {
  // 1. Basic failFast (default) – throws on first error
  try {
    final failFastResult =
        await ZipFuture.zip([delayedInt(1, 100), delayedInt(2, 200)]).execute();
    print('failFastResult: $failFastResult');
  } catch (e) {
    print('failFast error: $e');
  }

  // 2. Skip failures, limit concurrency to 2, 1s timeout
  final skipResults = await ZipFuture.zip(
    [
      delayedInt(1, 100),
      delayedInt(2, 1200),
      delayedInt(3, 50),
    ],
    errorPolicy: ErrorPolicy.skip,
    maxConcurrent: 2,
    timeout: Duration(seconds: 1),
  ).execute(onError: (i, e, _) => print('skipped at $i: $e'));
  print('skipResults (null = skipped): $skipResults');

  // 3. Collect errors, concurrency 3, no timeout
  try {
    final collectResults = await ZipFuture.zip(
      [delayedInt(1, 100), delayedInt(2, 150), delayedInt(3, 50)],
      errorPolicy: ErrorPolicy.collect,
      maxConcurrent: 3,
    ).execute(onError: (i, e, _) => print('collected at $i: $e'));
    print('collectResults: $collectResults');
  } catch (e) {
    print('collected exception: $e');
  }

  // 4. Using executeThenMap to sum non-null results
  final sum = await ZipFuture.zip([
    delayedInt(1, 50),
    delayedInt(3, 50),
    delayedInt(5, 50),
  ]).executeThenMap(
    (list) => list.whereType<int>().reduce((a, b) => a + b),
  );
  print('sum: $sum');

  // 5. Map-version with collect policy & concurrency 2
  try {
    final mapRes = await ZipFutureMap<String, int>.map(
      {
        'a': delayedInt(1, 100),
        'b': delayedInt(2, 300),
        'c': delayedInt(4, 50),
      },
      errorPolicy: ErrorPolicy.collect,
      maxConcurrent: 2,
      timeout: Duration(seconds: 1),
    ).execute(onError: (k, e, _) => print('map error at $k: $e'));
    print('mapRes: $mapRes');
  } catch (e) {
    print('map collected exception: $e');
  }
}
4
likes
150
points
50
downloads

Publisher

verified publisheraelahmar.com

Weekly Downloads

A Dart package for efficiently managing and executing multiple asynchronous operations (Futures) with advanced control over error handling, concurrency, and timeouts.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on zip_future