Snippets

Brian Medley Some promises

Created by Brian Medley

File promise.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/opt/perl
+ 
+use Mojo::Base -strict;
+ 
+use Mojo::UserAgent;
+use Mojo::IOLoop;
+ 
+{
+    package Mojo::UserAgent::Promises; 
+     
+    use strict;
+    use warnings;
+ 
+    # use Promises qw[deferred];  <-- Kudos
+     
+    use Mojo::Base 'Mojo::UserAgent';
+    use Mojo::Promise;
+    use Mojo::Util qw(monkey_patch);
+ 
+    sub start {
+        my ($self, $tx) = @_;
+
+        my $promise = Mojo::Promise->new;
+
+        $self->SUPER::start($tx, sub { $promise->resolve($self, $tx) });            
+
+        return $promise;
+    }
+
+    for my $name (qw(DELETE GET HEAD OPTIONS PATCH POST PUT)) {
+        monkey_patch __PACKAGE__, sprintf("a%s", lc $name), sub {
+            my $self = shift;
+            
+            my $cb = ref $_[-1] eq 'CODE' ? pop : undef;
+            
+            return $self->start($self->build_tx($name, @_), $cb);
+        };
+    }
+}
+ 
+my $ua = Mojo::UserAgent::Promises->new->max_redirects(4);
+
+my @promises = ();
+
+push(@promises, $ua->aget("http://mojolicio.us")->then(sub {
+    my $self = shift;
+
+    say("Yay: " . $_[1]->res->dom->at('title')->text);
+})->then(sub {
+    say("Next");
+}));
+
+push(@promises, $ua->aget("http://slashdot.org")->then(sub {
+    my $self = shift;
+
+    say("Skippie: " . $_[1]->res->dom->at('title')->text);
+})->then(sub {
+    say("Yes");
+}));
+
+Mojo::Promise->all(@promises)->then(sub {
+    say("Done");
+
+    Mojo::IOLoop->stop;
+});
+
+Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.