#!perl use strict; use warnings; use Mojo::UserAgent; use Mojo::IOLoop; { package Mojo::UserAgent::Promises; use strict; use warnings; use Promises qw[ deferred ]; use Mojo::Base 'Mojo::UserAgent'; sub start { my ($self, $tx, $cb) = @_; my $d = deferred; $self->SUPER::start( $tx, sub { $d->resolve( @_ ) }); return $d->then( $cb ) if $cb; return $d->promise; } } my $ua = Mojo::UserAgent::Promises->new; my $delay = Mojo::IOLoop->delay; foreach my $url (qw[ mojolicio.us www.cpan.org ]) { $delay->begin; $ua->get($url)->then( sub { my ($ua, $tx) = @_; $delay->end( $tx->res->dom->at('title')->text ); } ); } my @titles = $delay->wait; print join "\n" => @titles; print "\n"; 1; __END__