namespace GuzzleHttp\Promise;
* A promise that has been rejected.
* Thenning off of this promise will invoke the onRejected callback
* immediately and ignore other callbacks.
class RejectedPromise implements PromiseInterface
public function __construct($reason)
if (is_object($reason) && method_exists($reason, 'then')) {
throw new \InvalidArgumentException(
'You cannot create a RejectedPromise with a promise.'
callable $onFulfilled = null,
callable $onRejected = null
// If there's no onRejected callback then just return self.
$p = new Promise([$queue, 'run']);
$queue->add(static function () use ($p, $reason, $onRejected) {
// Return a resolved promise if onRejected does not throw.
$p->resolve($onRejected($reason));
} catch (\Throwable $e) {
// onRejected threw, so return a rejected promise.
} catch (\Exception $e) {
// onRejected threw, so return a rejected promise.
public function otherwise(callable $onRejected)
return $this->then(null, $onRejected);
public function wait($unwrap = true, $defaultDelivery = null)
throw Create::exceptionFor($this->reason);
public function getState()
public function resolve($value)
throw new \LogicException("Cannot resolve a rejected promise");
public function reject($reason)
if ($reason !== $this->reason) {
throw new \LogicException("Cannot reject a rejected promise");