Great, thanks - so something like the code example from here 
<http://mojolicio.us/perldoc/Mojo/IOLoop#delay>? Not sure how to replace 
the timer with recurring logic though

# Synchronize multiple eventsmy $delay = Mojo::IOLoop->delay(sub { say 'BOOM!' 
});for my $i (1 .. 10) {
  my $end = $delay->begin;
  Mojo::IOLoop->timer($i => sub {
    say 10 - $i;
    $end->();
  });}
$delay->wait;




On Tuesday, 21 April 2015 21:41:48 UTC+1, Dan Book wrote:
>
> The finish event of the controller is not really appropriate here. It will 
> not fire until the transaction is finished, which doesn't happen until you 
> render a response. So once a success happens you want to call something 
> that will render a response from there. You probably want to use the delay 
> helper which will turn off automatic rendering, keep a reference to the 
> transaction, and handle exceptions.
>
> On Tue, Apr 21, 2015 at 3:39 PM, hammondos <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>>
>> I'm trying to run an AJAX call that needs to check an external API queue 
>> for a response every second, then generate a chart based on that data using 
>> JSON.
>>
>> The code sample from the module I'm using to connect to the API suggests 
>> using a for...sleep loop, however clearly this doesn't work with 
>> Mojolicious. 
>>
>> I've tried several different permutations of using a recurring loop with 
>> varying degrees of success, but just can't get it to work - latest example 
>> below. This example never exits, even when there is data returned. 
>>
>> I'm aware that the $success parameter is probably not helping the 
>> situation, but would really appreciate any guidance on where to go next to 
>> stop the loop once a successful response has been received, and render a 
>> JSON response.
>>
>> my $success = 0;
>> my $id = Mojo::IOLoop->recurring(
>>     1 => sub {
>>         $self->finish if $success == 1;
>>         if (my $results = $sc_api->check_queue($report_id)) {
>>             my $rows = $sc_api->process_os($results);
>>             $log->info(Dumper($rows));
>>             &_insert_data({domain => $domain, path => $path, data => {os 
>> => $rows}});
>>             $success = 1;
>>          }
>>     }
>> );
>>
>> # need to wait
>> $self->on(finish => sub {
>>     # remove ioloop
>>     Mojo::IOLoop->remove($id);
>>
>>     my $db = $self->db;
>>     my $analytics = $db->get_collection('analytics');
>>     my $rows = $analytics->find({id => $url});
>>     my $doc = $rows->next;
>>     $self->render(json => $doc->{'analytics'}->{'os'});
>> });
>>
>>
>>  -- 
>> 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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/mojolicious.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to