Dan, thank you for your input.  I haven't looked at promises much but I was 
under the impression (based on some of Joel Berger's examples as well as 
one or two other key mojolicious developers) that delays were supposed to 
be cleaner and more desirable.

I knew about the issue with the for loop initialization.  Using the correct 
loop gave me a 500 error so I temporarily "broke" that while 
troubleshooting the passing of the data via the dumper helper.  I corrected 
that loop and swapped in your code but it is giving a "Premature connection 
close" error.
$ morbo ./titles_promise.pl
Server available at http://127.0.0.1:3000

[Thu Feb  7 11:02:35 2019] [debug] GET "/titles" (604f6be1)
[Thu Feb  7 11:02:35 2019] [debug] Routing to a callback
[Thu Feb  7 11:02:35 2019] [error] Premature connection close
[Thu Feb  7 11:02:35 2019] [debug] Template "exception.development.html.ep" 
not found
[Thu Feb  7 11:02:35 2019] [debug] Template "exception.html.ep" not found
[Thu Feb  7 11:02:35 2019] [debug] Rendering template "mojo/debug.html.ep"
[Thu Feb  7 11:02:35 2019] [debug] Rendering template "mojo/menubar.html.ep"
[Thu Feb  7 11:02:35 2019] [debug] Your secret passphrase needs to be 
changed
[Thu Feb  7 11:02:35 2019] [debug] 500 Internal Server Error (0.028391s, 
35.222/s)


Thinking that it might be due to a scoping issue with $ua, I moved that out 
to have file scope, but then it produced this error:
Use of inherited AUTOLOAD for non-method Mojo::Server::Sandbox::
b205866ab9c46b3f8105929c8a269a25::trim() is deprecated. This will be fatal 
in Perl 5.28 at /home/rkb/test/titles_promise.pl line 23.
[Thu Feb  7 11:19:23 2019] [error] Undefined subroutine &Mojo::Server::
Sandbox::b205866ab9c46b3f8105929c8a269a25::trim called at /usr/local/share/
perl/5.26.1/Mojo/Promise.pm line 123.



On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote:
>
> I'm brand new to Mojolicious and working on a lite script that goes to 75 
> urls and retrieves text in an h3 tag. I've worked up a working test script 
> that outputs to console and now I'm working on adjusting it to be a web app 
> but I can't seem to get the correct syntax to store/retrieve the data.  
> What am I doing wrong?
>
> #!/usr/bin/perl
>
> use Mojolicious::Lite;
>
> my @urls  = (
>     'https://mojolicious.org',
>     'https://metacpan.org',
>     'https://perlmonks.org',
>     'http://www.google.com',
> );
>
> get '/titles' => sub {
>     my $ua    = Mojo::UserAgent->new;
>     my $async = Mojo::IOLoop::Delay->new;
>
>     $async->steps(
>         sub { 
>             my $self = shift;
>             $ua->get($_, $self->begin) for @urls;
>         },
>         sub {
>             my ($self, @tx) = @_;
>             my $titles      = [];
>
>             foreach (@tx) {
>                 my $title  = '';
>                 my $status = $_->res->is_success ? 'Connected' : $_->error
> ->{message};
>
>                 if ( $_->res->is_success ) {
>                     $title = $_->res->dom->at('title')->text;
>                     $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util 
> trim function to work
>                 }
>
>                 push @$titles, {host => $_->req->url->host, status => 
> $status, title => $title};
>             }
>             $self->stash(titles => $titles);
>         }
>     );
> } => 'titles';
>
> app->start;
>
> __DATA__
>
> @@ titles.html.ep
> % layout 'titles';
>
> %= dumper stash('titles')
>
> <table border=1>
> <tr>
>   <th>Host</th>
>   <th>Status</th>
>   <th>Title</th>
> </tr>
>
> <!-- % for my $server ( @{ stash('titles') } ) { -->
> % for my $server ( stash('titles') ) {
>   <tr>
>     <td><%= $server->{host} %></td>
>     <td><%= $server->{status} %></td>
>     <td><%= $server->{title} =%></td>
>   </tr>
> % }
> </table>
>
> @@ layouts/titles.html.ep
> <!doctype html>
>
> <html>
>
> <head>
>   <title>Titles</title>
> </head>
>
> <body>
> <h1>Titles</h1>
> <%= content =%>
> </body>
>
> </html>
>
>
> Here's the output:
>
>> $ ./titles_web.pl get /titles
>> [Thu Feb  7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
>> [Thu Feb  7 09:45:54 2019] [debug] Routing to a callback
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template "titles.html.ep" 
>> from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template 
>> "layouts/titles.html.ep" from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
>> <!doctype html>
>>
>> <html>
>>
>> <head>
>>   <title>Titles</title>
>> </head>
>>
>> <body>
>> <h1>Titles</h1>
>>
>> undef
>>
>>
>> <table border=1>
>> <tr>
>>   <th>Host</th>
>>   <th>Status</th>
>>   <th>Title</th>
>> </tr>
>>
>> <!-- % for my $server ( @{ stash('titles') } ) { -->
>>   <tr>
>>     <td></td>
>>     <td></td>
>>     <td></td>
>> </tr>
>> </table>
>> </body>
>>
>> </html>
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to