public function then(callable $onFulfilled = null, callable $onRejected = null)
{
if (null === $onFulfilled) {
return $this;
}
return new Promise(function (callable $resolve, callable $reject) use($onFulfilled) {
queue()->enqueue(function () use($resolve, $reject, $onFulfilled) {
try {
$resolve($onFulfilled($this->value));
} catch (\Throwable $exception) {
$reject($exception);
} catch (\Exception $exception) {
$reject($exception);
}
});
});
}