That is not correct. The callback from $delay->begin is intended to be
invoked when the non-blocking activity is ready, after the control has
returned to the event loop.

On Tue, Mar 24, 2015 at 9:57 AM, Daniel Mantovani <[email protected]> wrote:

> In Mojo::IOLoop either $delay->begin or $delay->end must be invoked BEFORE
> you leave each step. It doesn't seem to be the case in the first step.
>
> There is a very nice explanation of what is hapening here:
> http://www.slideshare.net/deepfountainconsulting/asynchronous-programming-patterns-in-perl.
> There is even a very similar case in the quiz # 1, page 91. Just writing
> $delay->begin inside a callback does not mean you are actually invoking it
> before you leave the step.
>
> Second step looks fine, I tried but couldn't actually make it work :( but
> hope this comment will help.
>
> BR,
> Daniel
>
> El martes, 24 de marzo de 2015, 1:34:11 (UTC-3), Alexey Stavrov escribió:
>
>> I have this code which not output "666", "End Inserts", "End". What i do
>> wrong?
>>
>> #!/usr/bin/perl
>>
>>
>> use strict;
>> use warnings;
>> use v5.10;
>>
>>
>> use Mojo::Pg;
>> use Mojo::IOLoop;
>>
>>
>> my $pg = Mojo::Pg->new('postgresql://alex@/test');
>>
>>
>> my $db = $pg->db;
>>
>>
>> $db->query(q{create table if not exists qwe (num integer, text text)});
>>
>>
>> sub upsert {
>>   Mojo::IOLoop->delay(
>>     sub {
>>       my $delay = shift;
>>       for my $i (1 .. 30) {
>>         warn "update: $i";
>>         $db->query(q{update qwe set num = ? where text = ?}, $i, "$i" =>
>> $delay->begin);
>>       }
>>     },
>>     sub {
>>       my $delay = shift;
>>
>>
>>       $delay->pass;
>>
>>
>>       for my $i (1 .. 30) {
>>         my ($err, $res) = (shift, shift);
>>         unless ($res->rows) {
>>           my $end = $delay->begin;
>>           say "insert $i";
>>           $db->query(q{insert into qwe(num, text) values (?, ?)}, $i,
>> "$i" => sub { say '666'; $end->(@_); });
>>         }
>>       }
>>     },
>>     sub {
>>       say 'End inserts';
>>       Mojo::IOLoop->stop;
>>     }
>>   );
>> }
>>
>>
>> upsert();
>>
>>
>> Mojo::IOLoop->start;
>>
>>
>> say 'End';
>>
>>
>>
>> Thanks.
>>
>  --
> 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.

Reply via email to