NAME
Fetch::Future - a fast, native, Future-compatible async result
SYNOPSIS
my $f = Fetch::Future->new;
$f->on_done(sub { my $v = shift; ... });
$f->done(42);
my $all = Fetch::Future->needs_all($f1, $f2);
my @v = $f->get; # pumps the active loop (or Standalone) until ready
DESCRIPTION
An asynchronous result with an API compatible with CPAN Future: done/fail/cancel, on_ready/on_done/on_fail, then/else/followed_by/transform, get/await, and the convergent combinators wait_all/wait_any/needs_all/needs_any.
The implementation is entirely XS over an array-slot object; continuations are C closures trampolined through a fire queue, so long then-chains run iteratively with bounded stack depth.
get/await on a pending future pump the current event loop re-entrantly. Outside a running loop, an external loop may install $Fetch::Future::AWAIT (a coderef receiving the future) to make awaiting work.
as_cpan_future / from_future convert to and from CPAN Future objects for interop with isa('Future') code.
CONSTRUCTORS
new
my $f = Fetch::Future->new;
A new pending future.
done_future(@values) / fail_future(@failure)
my $f = Fetch::Future->done_future(42);
my $f = Fetch::Future->fail_future("nope\n");
An already-resolved future, done with @values or failed with @failure.
RESOLVING
done(@values)
Mark a pending future done with @values; fires its ready/done callbacks. Returns the future.
fail($message, @details)
Mark a pending future failed. Returns the future.
cancel
Cancel a pending future.
STATE
is_ready / is_done / is_failed / is_cancelled
Booleans: whether the future has settled at all, and how.
CALLBACKS
on_ready($cb)
Call $cb->($future) when the future settles (done, failed or cancelled). Returns the future.
on_done($cb) / on_fail($cb)
Call $cb->(@values) on success, or $cb->(@failure) on failure. Return the future.
CHAINING
Each returns a new future and flattens a future returned by the callback, so long chains compose without nesting.
then($on_done) / then($on_done, $on_fail)
Run $on_done with the values when this future succeeds; its result (a value list or a future) becomes the new future's result. Failure passes through unless $on_fail is given.
else($on_fail)
Like then but for the failure branch.
followed_by($cb)
Call $cb->($future) once this future settles either way, and adopt the future it returns.
transform(done => $cb, fail => $cb)
Map the done values and/or failure through the given coderefs.
AWAITING
get / result
my @values = $f->get; # or a scalar in scalar context
Block until the future is ready, pumping the active event loop (the Standalone loop if none), then return its values - or rethrow its failure.
await
Block until ready (pumping the loop) and return the future itself.
failure
The failure of a failed future (the first failure value), or undef.
COMBINATORS
Each takes a list of futures and returns one future.
needs_all(@futures)
Done when all succeed (with their combined values); fails as soon as any fails.
needs_any(@futures)
Done as soon as any succeeds; fails only if all fail.
wait_all(@futures)
Done when all have settled, whatever the outcome.
wait_any(@futures)
Done as soon as any has settled.
INTEROP
as_cpan_future
A real CPAN Future that settles when this one does, for code expecting isa('Future').
from_future($cpan_future)
my $f = Fetch::Future->from_future($cpan_future);
A Fetch::Future that mirrors the given CPAN Future.
AUTHOR
LNATION <email@lnation.org>
LICENSE AND COPYRIGHT
This software is Copyright (c) 2026 by LNATION. This is free software, licensed under the Artistic License 2.0.