Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Because parallel requests in Mojolicious should be as fun as parallololololol
Perl
Branch: master
Pull request Compare This branch is 2 commits ahead, 6 commits behind Nordaaker:master.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
t
.gitignore
.travis.yml
Changes
Makefile.PL
README

README

NAME
    Mojolicious::Plugin::Parallol - Because parallel requests should be as
    fun as parallololololol!

SYNOPSIS
      # Mojolicious
      $self->plugin('Parallol');

      # Mojolicious::Lite
      plugin 'Parallol';

DESCRIPTION
    Mojolicious::Plugin::Parallol provides a simple helper for managing
    several parallel requests in the controller.

HELPERS
    Mojolicious::Plugin::Parallol implements the following helpers.

  `parallol'
    Parallol optimizes for the common case: You want to call several
    parallel requests and render the view when they're done.

      get '/' => sub {
        my $self = shift;

        $self->ua->get('http://bbc.co.uk/', $self->parallol(sub {
          $self->stash(bbc => pop->res->dom->at('title')->text);
        }));

        $self->ua->get('http://mojolicio.us/', $self->parallol(sub {
          $self->stash(mojo => pop->res->dom->at('title')->text);
        }));
      };

    By wrapping a callback in `$self->parallol' you mark the current
    response as asynchronous (see Mojolicious::Controller) and Parallol will
    render the view when all callbacks are called.

    Automatic stashing
    By passing a string to `$self->parallol' it will stash the last argument
    of the result instead. If we rewrite the previous example to use a
    helper, we can simplify our controller quite a lot.

      get '/' => sub {
        my $self = shift;

        $self->title('http://bbc.co.uk/',    $self->parallol('bbc'));
        $self->title('http://mojolicio.us/', $self->parallol('mojo'));
      };

      helpers title => sub {
        my ($self, $url, $cb) = @_;
        $self->ua->get($url, sub {
          $cb->(pop->res->dom->at('title')->text);
        });
      };

    It's recommended that you move as much logic to helpers and other
    classes/methods so you can take advantage of automatic stashing.

    Overriding "done" behavior
    When you need to do more than just rendering the view you can override
    the "done" callback:

      get '/' => sub {
        my $self = shift;
        $self->on_parallol(sub {
          shift->render(template => 'something_else');
        });
      };

    $self weakening
    In order to prevent memory leaks, Parallol will automatically `weaken
    $self'. This means that if you *don't* refer to `$self' in your callback
    objects will magically disappear.

      # This controller will behave very strangely:
      get '/' => sub {
        my $self = shift;
        my $res = {};
        $self->ua->get('http://bbc.co.uk/', $self->parallol(sub {
          # There's no reference to $self in this block
          $res->{bbc} = pop->res->dom->at('title')->text;
        }));
      };

    In these cases you can disabled weakening by passing in `weaken => 0'.

      # This controller is fine:
      get '/' => sub {
        my $self = shift;
        my $res = {};
        $self->ua->get('http://bbc.co.uk/', $self->parallol(weaken => 0, sub {
          # There's no reference to $self in this block
          $res->{bbc} = pop->res->dom->at('title')->text;
        }));
      };

METHODS
    Mojolicious::Plugin::Parrallol inherits all methods from
    Mojolicious::Plugin and implements the following new ones.

  `register'
      $plugin->register;

    Register helpers in Mojolicious application.

SEE ALSO
    Mojolicious, Parallol

Something went wrong with that request. Please try again.