Scroll to navigation

Mojo::IOLoop::Delay(3pm) User Contributed Perl Documentation Mojo::IOLoop::Delay(3pm)

NAME

Mojo::IOLoop::Delay - Synchronize events

SYNOPSIS

  use Mojo::IOLoop::Delay;
  # Synchronize multiple events
  my $delay = Mojo::IOLoop::Delay->new;
  $delay->on(finish => sub { say 'BOOM!' });
  for my $i (1 .. 10) {
    $delay->begin;
    Mojo::IOLoop->timer($i => sub {
      say 10 - $i;
      $delay->end;
    });
  }
  # Wait for events if necessary
  $delay->wait unless Mojo::IOLoop->is_running;

DESCRIPTION

Mojo::IOLoop::Delay synchronizes events for Mojo::IOLoop.

EVENTS

Mojo::IOLoop::Delay can emit the following events.

"finish"

  $delay->on(finish => sub {
    my $delay = shift;
    ...
  });
Emitted safely once the active event counter reaches zero.

ATTRIBUTES

Mojo::IOLoop::Delay implements the following attributes.

"ioloop"

  my $ioloop = $delay->ioloop;
  $delay     = $delay->ioloop(Mojo::IOLoop->new);
Loop object to control, defaults to the global Mojo::IOLoop singleton.

METHODS

Mojo::IOLoop::Delay inherits all methods from Mojo::EventEmitter and implements the following new ones.

"begin"

  my $cb = $delay->begin;
Increment active event counter, the returned callback can be used instead of "end".
  my $delay = Mojo::IOLoop->delay;
  Mojo::UserAgent->new->get('mojolicio.us' => $delay->begin);
  my $tx = $delay->wait;

"end"

  $delay->end;
  $delay->end(@args);
Decrement active event counter.

"wait"

  my @args = $delay->wait;
Start "ioloop" and stop it again once the "finish" event gets emitted, only works when "ioloop" is not running already.
  # Use the "finish" event to synchronize portably
  $delay->on(finish => sub {
    my ($delay, @args) = @_;
    ...
  });
  $delay->wait unless $delay->ioloop->is_running;

SEE ALSO

Mojolicious, Mojolicious::Guides, <http://mojolicio.us>.
2012-09-05 perl v5.14.2