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) {