NAME Mojo::Promise::Role::Futurify - Chain a Future from a Mojo::Promise SYNOPSIS use Mojo::Promise; my $promise = Mojo::Promise->with_roles('+Futurify')->new; my $future = $promise->futurify->on_ready(sub { my $f = shift; say $f->is_done ? 'Done' : 'Failed'; }); $promise->ioloop->timer(5 => sub { $promise->resolve }); $future->await; use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; # complicated way of doing $ua->get('https://example.com') my $tx = $ua->get_p('https://example.com')->with_roles('+Futurify')->futurify->get; # using Future composition methods my @futures; foreach my $url (@urls) { push @futures, $ua->get_p($url)->with_roles('+Futurify')->futurify; } use Future; Future->wait_all(@futures)->then(sub { foreach my $f (@_) { if ($f->is_done) { my $tx = $f->get; } elsif ($f->is_failed) { my $err = $f->failure; } } })->await; # using Future::Utils in a Mojolicious application use Mojolicious::Lite; use Future::Utils 'fmap_concat'; my $ua = Mojo::UserAgent->new; get '/foo' => sub { my $c = shift; my $count = $c->param('count') // 50; my $f = fmap_concat { $ua->get_p('https://example.com')->with_roles('+Futurify')->futurify; } foreach => [1..$count], concurrent => 10; my $tx = $c->render_later->tx; $f->on_done(sub { my @txs = @_; $c->render(json => [titles => map { $_->res->dom->at('title')->text } @txs]); })->on_fail(sub { $c->reply->exception(@_); })->on_ready(sub { undef $tx })->retain; }; app->start; DESCRIPTION Mojo::Promise::Role::Futurify provides an interface to chain Future objects from Mojo::Promise objects. METHODS Mojo::Promise::Role::Futurify composes the following methods. futurify my $future = $promise->futurify; Returns a Future::Mojo object that will become ready with success or failure when the Mojo::Promise resolves or rejects. BUGS Report any issues on the public bugtracker. AUTHOR Dan Book COPYRIGHT AND LICENSE This software is Copyright (c) 2017 by Dan Book. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) SEE ALSO Mojo::Promise, Future, Future::Mojo