get '/titles' => sub ($c) { $c->render_later; my $tx = $c->tx; my @promises = map { $ua->get_p($_) } @urls; Mojo::Promise->all(@promises)->then(sub { my @results = @_; my $titles = []; foreach my $result (@results) { my $tx = $result->[0]; my $title = trim($tx->res->dom->at('title')->text); my $status = $tx->res->is_success ? 'Connected' : $tx->error->{message}; push @$titles, {host => $tx->req->url->host, status => $status, title => $title}; } $c->render(titles => $titles); })->catch(sub { $c->reply->exception(pop); undef $tx }); } => 'titles';