Skip to content

Commit 3925564

Browse files
author
Anton Shabouta
committed
Always defer execution
1 parent c67837c commit 3925564

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/Processor.php

+15-7
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
namespace PHPinnacle\Ensign;
1414

1515
use Amp;
16+
use Amp\Deferred;
1617
use Amp\Promise;
17-
use Amp\Success;
1818

1919
final class Processor
2020
{
@@ -67,14 +67,22 @@ public function interrupt(string $interrupt, callable $handler): void
6767
*/
6868
public function execute(callable $handler, array $arguments): Promise
6969
{
70-
return Amp\call(function () use ($handler, $arguments) {
71-
$result = $this->executor->execute($handler, $arguments);
70+
$deferred = new Deferred;
7271

73-
if ($result instanceof \Generator) {
74-
return new Subroutine($result, $this->resolver);
75-
}
72+
Amp\Loop::defer(function () use ($deferred, $handler, $arguments) {
73+
try {
74+
$result = $this->executor->execute($handler, $arguments);
75+
76+
if ($result instanceof \Generator) {
77+
$result = new Subroutine($result, $this->resolver);
78+
}
7679

77-
return $result;
80+
$deferred->resolve($result);
81+
} catch (\Throwable $error) {
82+
$deferred->fail($error);
83+
}
7884
});
85+
86+
return $deferred->promise();
7987
}
8088
}

0 commit comments

Comments
 (0)