From fe122cd190d9cd48abea4a52775b4c99abe81f0e Mon Sep 17 00:00:00 2001 From: Joel Wurtz Date: Tue, 25 Sep 2018 14:49:00 +0200 Subject: [PATCH] Fix deferred when in a non async context --- src/Deferred.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Deferred.php b/src/Deferred.php index 075a30e..d1b0e87 100644 --- a/src/Deferred.php +++ b/src/Deferred.php @@ -3,6 +3,8 @@ namespace Http\Client\Common; use Http\Client\Exception; +use Http\Client\Promise\HttpFulfilledPromise; +use Http\Client\Promise\HttpRejectedPromise; use Http\Promise\Promise; use Psr\Http\Message\ResponseInterface; @@ -36,6 +38,14 @@ public function __construct(callable $waitCallback) */ public function then(callable $onFulfilled = null, callable $onRejected = null) { + if ($this->state === self::FULFILLED) { + return (new HttpFulfilledPromise($this->value))->then($onFulfilled, $onRejected); + } + + if ($this->state === self::REJECTED) { + return (new HttpRejectedPromise($this->failure))->then($onFulfilled, $onRejected); + } + $deferred = new self($this->waitCallback); $this->onFulfilledCallbacks[] = function (ResponseInterface $response) use ($onFulfilled, $deferred) {