diff --git a/lib/App/Controller/Apiv1.pm b/lib/App/Controller/Apiv1.pm index 7bbdf22..74de527 100644 --- a/lib/App/Controller/Apiv1.pm +++ b/lib/App/Controller/Apiv1.pm @@ -4,6 +4,7 @@ use strict; use warnings; use Mojo::Base 'Mojolicious::Controller'; +use Mojo::Promise; sub routes { my ($class, $r) = @_; @@ -28,12 +29,11 @@ sub api_get_paste { my $row = $c->paste->get_paste($pasteid); if ($row) { - $c->delay(sub { - my ($delay) = @_; - $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0, 1)) - }, - sub { - my ($delay, $evalres) = @_; + my $promise = Mojo::Promise->new(sub { + my ($resolve, $reject) = @_; + $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $resolve) + })->then(sub { + my ($evalres) = @_; my ($status, $output_hr) = $evalres->@{qw/status output/}; @@ -52,6 +52,7 @@ sub api_get_paste { $c->render(json => $data); }); + return $promise; } else { # 404 return $c->reply->not_found; diff --git a/lib/App/Controller/Apiv2.pm b/lib/App/Controller/Apiv2.pm index f2b1c12..909051e 100644 --- a/lib/App/Controller/Apiv2.pm +++ b/lib/App/Controller/Apiv2.pm @@ -5,6 +5,7 @@ use warnings; use Mojo::Base 'Mojolicious::Controller'; use Function::Parameters; +use Mojo::Promise; sub routes { my ($class, $r) = @_; @@ -48,12 +49,11 @@ sub api_get_paste { my $row = $c->paste->get_paste($pasteid); if ($row) { - $c->delay(sub { - my ($delay) = @_; - $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0, 1)) - }, - sub { - my ($delay, $evalres) = @_; + my $promise = Mojo::Promise->new(sub { + my ($resolve, $reject) = @_; + $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $resolve) + })->then(sub { + my ($evalres) = @_; my ($status, $output_hr) = $evalres->@{qw/status output/}; @@ -69,6 +69,7 @@ sub api_get_paste { $c->render(json => $data); }); + return $promise; } else { # 404 return $c->reply->not_found; diff --git a/lib/App/Controller/Eval.pm b/lib/App/Controller/Eval.pm index 605129e..5f91517 100644 --- a/lib/App/Controller/Eval.pm +++ b/lib/App/Controller/Eval.pm @@ -4,6 +4,7 @@ use strict; use warnings; use Mojo::Base 'Mojolicious::Controller'; +use Mojo::Promise; sub routes { my ($class, $r) = @_; @@ -25,14 +26,11 @@ sub run_eval { my $code = $data->param('code') // ''; my $language = $data->param('language') // 'perl'; - $self->delay(sub { - my $delay = shift; - $self->eval->get_eval(undef, $code, [$language], 1, $delay->begin(0,1)); - - return 1; - }, - sub { - my $delay = shift; + my $promise = Mojo::Promise->new(sub { + my ($resolve, $reject) = @_; + $self->eval->get_eval(undef, $code, [$language], 1, $resolve); + }); + $promise->then(sub { my ($evalres) = @_; use Data::Dumper; diff --git a/lib/App/Controller/Paste.pm b/lib/App/Controller/Paste.pm index 4160c26..e92be23 100644 --- a/lib/App/Controller/Paste.pm +++ b/lib/App/Controller/Paste.pm @@ -6,6 +6,7 @@ use warnings; use App::Config; use Mojo::Base 'Mojolicious::Controller'; use Mojo::IOLoop; +use Mojo::Promise; sub routes { my ($class, $r) = @_; @@ -82,12 +83,12 @@ sub get_paste { my $row = $c->paste->get_paste($pasteid); if ($row) { - $c->delay(sub { - my $delay = shift; + my $promise = Mojo::Promise->new(sub { + my $resolve = shift; - $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0,1)); - }, sub { - my ($delay, $evalres) = @_; + $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $resolve); + })->then(sub { + my ($evalres) = @_; my ($status, $evalout) = $evalres->@{qw/status output/}; $c->stash($row); @@ -101,6 +102,8 @@ sub get_paste { $c->render('page'); }); + + return $promise } else { return $c->reply->not_found; }