Sort of. You want the delay helper here: https://metacpan.org/pod/Mojolicious::Plugin::DefaultHelpers#delay
That creates a Mojo::IOLoop delay as well, but also does all the things I described before relevant to rendering. You won't be able to do a recurring timer exactly the same way, as you can't set up begin() callbacks in advance since you don't know how many there will be. You will want to just create a recurring timer in the first step, get the callback from $delay->begin, and you can have that call $end->() to proceed to the next step when you get a success. On Tue, Apr 21, 2015 at 4:58 PM, hammondos <[email protected]> wrote: > 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]> 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]. >>> 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. >>> >> >> -- > 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. > -- 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.
