Ok cool, thanks for pointing me in the right direction

On Tuesday, 21 April 2015 22:10:36 UTC+1, Dan Book wrote:
>
> 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] 
> <javascript:>> 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] <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