public function spread(callable $onFulfilled = null, callable $onRejected = null, callable $onCancel = null) { return $this->then(function ($values) use($onFulfilled) { return call_user_func_array($onFulfilled, (array) $values); }); }