public function always(callable $onFulfilledOrRejected)
{
return $this->then(function ($value) use($onFulfilledOrRejected) {
return self::doResolve($onFulfilledOrRejected())->then(function () use($value) {
return $value;
});
}, function ($reason) use($onFulfilledOrRejected) {
return self::doResolve($onFulfilledOrRejected())->then(function () use($reason) {
return new PromiseRejected($reason);
});
}, function ($reason) use($onFulfilledOrRejected) {
return self::doResolve($onFulfilledOrRejected())->then(function () use($reason) {
return new PromiseCancelled($reason);
});
});
}